2016-08-26 6 views
0

나는 두 가지 옵션을 사용자에게 제공하는 파이썬 스크립트를 작성 중이다. 하나의 옵션에서 사용자 입력은 백그라운드에서 기능을 실행하는 데 사용됩니다. 다른 예에서 사용자 입력은 전경에서 기능을 실행하는 데 사용됩니다. 어떻게 둘 다 달성 할 수 있습니까? 백그라운드에서 전체 스크립트를 실행하기 위해 "nohup"명령을 사용하고 싶지 않습니다. 나는 단지 특정 기능이 백그라운드에서 실행되기를 원한다.백그라운드에서 파이썬 코드의 일부 실행하기

나는 또한 백그라운드 프로세스가 사용자의 의지로 멈추길 원한다.

def display(): 
    cnt = 1 
    a = [] 
    if len(live_matches) == 0: 
     print "sorry, no live matches currently" 
    else: 
     for match in live_matches: 
      print str(cnt) + "." + match['mchdesc'] + "," + match['mnum'] 
      a[cnt] = match 
      cnt = cnt + 1 
     choice = raw_input("Enter the match numbers for live updates separated by spaces") 
     for c in choice.split(' '): 
      update_matches.append(a[int(c)]) 
     if len(update_matches) > 0: 
      #call some function and run in background 
    cnt = 1 
    for match in completed_matches: 
     print str(cnt) + "." + match['mchdesc'] + "," + match['mnum'] 
     cnt = cnt + 1 
    choice = raw_input("enter the match number for scorecard") 
    #call some function again but run it in foreground 
+0

[셀러리] (http://www.celeryproject.org/) – Harrison

+0

[다중 처리] (https://docs.python.org/2/library/multiprocessing.html?highlight=multiprocessing#module-multiprocessing) 표준 Python 모듈을 사용하여 백그라운드에서 함수를 실행합니다. – mguijarr

+0

이러한 기능을 async/sync로 실행한다는 것은 의미합니까? – danielfranca

답변

1

1. threading.Thread 어쩌면 당신을 도울하고 threading.Lock()이 데이터를 잠급니다 : 여기

내가 뭘 원하는지의 작은 샘플입니다.

나는 단지 그것에 대해 생각할 수있다. 사용자 입력을 확인하기 위해 global input data을 사용할 수 있으며 두 개의 스레드가이를 점검하고 출력 데이터를 잠그는 사람을 결정하며 주 스레드가이를 인쇄하고 입력이 두 가지를 끝낼 수있다. 스레드. 당신이 yield 때까지 네이티브 공동 루틴 기능을 실행하기 위해 send 방법을 사용할 수 있습니다,

2.await/비동기 비동기 IO를위한 좋은 방법입니다 (아마도 while 루프를 중단). 아마도이 작업을 수행 할 수 있습니다.

희망이 도움이됩니다.