1

멀티 프로세싱은 저에게 새로운 것입니다. 나는 그것에 관해 약간을 읽는다. 그러나 그것은 나를 더 혼란하게한다. 간단한 예를 들어 이해하고 싶습니다. 첫 번째 함수에 2 개의 함수가 있다고 가정 해 봅니다. 'a'변수를 증가시킨 다음 'number'변수에 할당합니다. 두 번째 함수는 첫 번째 함수를 시작하고 매 순간마다 'number'변수를 인쇄하려고합니다. 모양은 다음과 같습니다 :파이썬에서의 병렬 다중 처리 예제가 편리합니다.

global number 

def what_number(): 
    a=1 
    while True: 
     a+=1 
     number=a 

def read_number(): 
    while True: 
     --> #here I need to start 'what_number' function <-- 
     time.sleep(1) 
     print(number) 


if __name__ == "__main__": 
    read_number() 

어떻게하면됩니까? 그렇게하기위한 쉽고 적절한 방법이 있습니까?

업데이트 :

나는 정말 thankfull 대답이야 noxdafox 보았다하지만 정확히 내가 원하는 없습니다. 무엇보다도 먼저 noxdafox 코드의 첫 번째 함수 ('main')에 값을 보내지 않으려 고합니다. 두 번째로 나는 모든 가치를 얻고 싶지 않으므로 퀸이 효과가 없을 것입니다. 나는 while 루프의 매 두 번째 숫자 후에 얻어야한다. enter image description here

는하지만,이 블루 선택된 값이 동일해야합니다 : u는 위의 코드를 실행하면

import multiprocessing 
import time 

number = 0 


def child_process(): 
    global number 
    while True: 
     number += 1 
     print(number) 


def main(): 
    process = multiprocessing.Process(target=child_process) 
    process.start() 

    while True: 
     print("should get same number:",number) 
     time.sleep(0.001) 

if __name__ == "__main__": 
    main() 

당신이 뭔가를 얻을 : 코드는 무언가 같이해야합니다! 그게 가장 큰 문제입니다 :) 혼란

+0

http://chriskiehl.com/article/parallelism-in-one-line/ – user45245

+0

'global number'? – alfasin

+1

[multiprocessing.Pool : 가능한 경우 적용, \ _async 또는 map?] 복제본 (https://stackoverflow.com/questions/8533318/multiprocessing-pool-when-to-use-apply-apply-async- 또는 – alfasin

답변

0

시간이 좀 걸리지 만 알아 냈습니다. 모든 것이 바로 Sharing state between processes이었습니다. 이제는 매력처럼 작동합니다. 코드 :

from multiprocessing import Process, Value 
import time 


def child_process(number): 
    number.value = 0 
    while True: 
     number.value += 1 
     #print(number) 


def main(): 
    num = Value('i') 
    process = Process(target=child_process, args=(num,)) 
    process.start() 
    while True: 
     print("should get same number:", num.value) 
     time.sleep(1) 

if __name__ == "__main__": 
    main() 
0

프로세스가 별도의 메모리 주소 공간에 살고, 당신은 변수를 공유 할 수 없습니다에 대한

P.S 죄송합니다. 또한 전역 변수를 잘못 사용하고 있습니다. Here 전역 변수를 사용하는 방법에 대한 예제를 볼 수 있습니다.

프로세스간에 정보를 공유하는 가장 쉬운 방법은 Pipe 또는 Queue입니다.

import multiprocessing 

def child_process(queue): 
    while True: 
     number = queue.get() 
     number += 1 
     queue.put(number) 

def main(): 
    number = 0 
    queue = multiprocessing.Queue() 
    process = multiprocessing.Process(target=child_process, args=[queue]) 
    process.start() 

    while True: 
     print("Sending %d" % number) 
     queue.put(number) 

     number = queue.get() 
     print("Received %d" % number) 

     time.sleep(1) 

if __name__ == "__main__": 
    main() 
+0

답변 해 주셔서 감사합니다. 그러나이 경우 1 초마다 1 씩 숫자가 증가합니다. 요점은 내가 의미하는 것을 알고있는 while 루프의 수를 얻는 것입니다. – KyluAce

+0

루프 중에 숫자가 항상 1 초간 증가하고있는 숫자의 가치를 얻는 것을 의미합니다. – KyluAce

+0

그런 식으로 할 방법이 있습니까? https://pastebin.com/ehMv1j1p? 하지만 지금은 모든 시간을주고 있어요 0 – KyluAce