0

다음은 문제를 나타내는 코드입니다. 이 예제는 단지 예일뿐입니다. 더 복잡한 어플리케이션에서 동일한 로직을 사용하고 있습니다. 시간을 절약하기 위해 sleep을 사용할 수 없으며, process1이 변수를 수정하는 데 걸리는 시간은 속도에 달려 있습니다. 인터넷 연결.한 스레드에서 변수를 수정하고 다른 스레드에서이를 확인하는 방법은 무엇입니까?

from multiprocessing import Process 

code = False 

def func(): 
    global code 
    code = True 

pro = Process(target=func) 
pro.start() 

while code == False: 
    pass 

pro.terminate() 
pro.join() 

print('Done!') 

이 옵션을 선택하면 화면에 아무 것도 표시되지 않습니다. CTRL-C를 눌러 프로그램을 종료하면 스택 추적은 while 루프가 실행되었음을 보여줍니다.

+4

프로세스는 스레드가 아닙니다. 이 프로세스는 자체 독립적 인 전역 변수를 설정합니다. '멀티 프로세싱'프로세스 사이에서 통신하고 싶다면,'멀티 프로세싱'툴이 제공하는 문서와 문서를 사용하십시오. – user2357112

+0

@ user2357112이 질문을 [파이썬 다중 처리의 공유 변수] (http://stackoverflow.com/questions/17377426/shared-variable-in-pythons-multiprocessing)에서 중복으로 표시 할 수 있습니까? 제 2의 의견이 필요합니다 –

+0

@ user2357112 예제 코드를 제공해 주시겠습니까? –

답변

1

파이썬에는 몇 가지 동시성 라이브러리 인 threading, multiprocessingasyncio (이상)이 있습니다.

multiprocessing은 파이썬이 CPU 집약적 인 작업을 동시에 수행 할 수 없도록하는 서브 프로세스를 사용하는 라이브러리입니다. 다른 multiprocessing.Process 사이의 변수를 공유하려면 multiprocessing.Manager() 인스턴스를 통해 변수를 만듭니다. 예 :

import multiprocessing 

import time 


def func(event): 
    print("> func()") 
    time.sleep(1) 
    print("setting event") 
    event.set() 
    time.sleep(1) 
    print("< func()") 


def main(): 
    print("In main()") 

    manager = multiprocessing.Manager() 
    event = manager.Event() 
    p = multiprocessing.Process(target=func, args=(event,)) 
    p.start() 

    while not event.is_set(): 
     print("waiting...") 
     time.sleep(0.2) 

    print("OK! joining func()...") 
    p.join() 

    print('Done!') 


if __name__ == "__main__": 
    main()