如何在python中的进程之间共享数据?
下面是一个简单的例子:如何在python中的进程之间共享数据?,python,multiprocessing,Python,Multiprocessing,下面是一个简单的例子: from collections import deque from multiprocessing import Process global_dequeue = deque([]) def push(): global_dequeue.append('message') p = Process(target=push) p.start() def pull(): print(global_dequeue) pull() 输出为deque([
from collections import deque
from multiprocessing import Process
global_dequeue = deque([])
def push():
global_dequeue.append('message')
p = Process(target=push)
p.start()
def pull():
print(global_dequeue)
pull()
输出为deque([])
如果我直接调用push函数,而不是作为一个单独的进程,那么输出将是deque(['message'])
如何将消息导入deque,但仍在单独的进程中运行push函数 您可以使用多处理队列对象共享数据,该对象用于在进程之间共享数据:
from multiprocessing import Process, Queue
import time
def push(q): # send Queue to function as argument
for i in range(10):
q.put(str(i)) # put element in Queue
time.sleep(0.2)
q.put("STOP") # put poison pillow to stop taking elements from Queue in master
if __name__ == "__main__":
q = Queue() # create Queue instance
p = Process(target=push, args=(q,),) # create Process
p.start() # start it
while True:
x = q.get()
if x == "STOP":
break
print(x)
p.join() # join process to our master process and continue master run
print("Finish")
如果有帮助,请告诉我,请随时提问。您也可以使用经理来实现这一点 Python 2: Python 3: 用法示例:
Artiom Kozyrev就是这样,谢谢。一个问题。如果我将不按顺序完成的作业放入队列列表,我应该怎么做?呼叫get,如果作业id不是我要找的,请将其放回队列?@ape_face是的,如果您现在不想处理任务,可以将其返回队列,但您应该使用一些同步,而不是jutst posison枕头。