在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Python/ python3中多進程如何共享全局變量?

python3中多進程如何共享全局變量?

上代碼

from multiprocessing import Pool, Queue
import os, time, random

def long_time_task(name, queue):
    print('Run task %s (%s)...' % (name, os.getpid()))
    start = time.time()
    time.sleep(random.random() * 3)
    end = time.time()
    print('Task %s runs %0.2f seconds.' % (name, (end - start)))
    print(queue.get())

if __name__=='__main__':
    print('Parent process %s.' % os.getpid())
    p = Pool(2)
    q = Queue(10)
    for j in range(10):
        q.put(j)
    for i in range(5):
        p.apply_async(long_time_task, args=(i, q))
    print('Waiting for all subprocesses done...')
    p.close()
    p.join()
    print('All subprocesses done.')

以上代碼是不行的,不會執(zhí)行想要的效果。
如果我想在多個進程中共用一個全局隊列,應該如何操作?Google過了,還是不太清除其中的知識點。麻煩前輩們解惑。

回答
編輯回答
若相惜

多進程共用全局隊列,那么無外乎兩種情況,一種全局隊列存在內(nèi)存中,比如用redis,一種全局隊列存在硬盤上,比如數(shù)據(jù)庫mysql。
多進程通信的話還可以考慮pipe和socket, multiprocessing.Manager.Queue就是pipe通信。

from multiprocessing import Pool, Manager
import os, time, random

def long_time_task(name, queue):
    print('Run task %s (%s)...' % (name, os.getpid()))
    start = time.time()
    time.sleep(random.random() * 3)
    end = time.time()
    print('Task %s runs %0.2f seconds.' % (name, (end - start)))
    print(queue.get())

if __name__=='__main__':
    print('Parent process %s.' % os.getpid())
    p = Pool(2)
    q = Manager().Queue(10)
    for j in range(10):
        q.put(j)
    for i in range(5):
        p.apply_async(long_time_task, args=(i, q))
    print('Waiting for all subprocesses done...')
    p.close()
    p.join()
    print('All subprocesses done.')
2017年10月29日 23:13