我有一个问题,了解multiprocessingpython 3中模块中的队列
这就是他们在编程指南中所说的:
请记住,将项目放入队列的进程将在终止之前等待,直到所有缓冲的项目由"feeder"线程提供给底层管道.(子进程可以调用队列的Queue.cancel_join_thread方法来避免此行为.)
这意味着无论何时使用队列,您都需要确保在加入进程之前最终删除已放入队列的所有项目.否则,您无法确定已将项目放入队列的进程将终止.还要记住,非守护进程会自动加入.
将导致死锁的示例如下:
from multiprocessing import Process, Queue def f(q): q.put('X' * 1000000) if __name__ == '__main__': queue = Queue() p = Process(target=f, args=(queue,)) p.start() p.join() # this deadlocks obj = queue.get()这里的一个修复是交换最后两行(或简单地删除p.join()行).
所以显然,queue.get()不应该在之后调用join().
但是,有一些使用队列的例子,get在join类似之后调用:
import multiprocessing as mp
import random
import string
# define a example function
def rand_string(length, output):
""" Generates a random string of numbers, lower- and uppercase chars. """
rand_str = …Run Code Online (Sandbox Code Playgroud) 关闭 ipython 笔记本后,我意识到所有代码都在那里,但名称空间已被重置,因为我拥有的所有变量都消失了。有没有办法可以保存变量,以便当我重新打开 ipython 笔记本时,变量都在那里,而无需重新运行代码?