|
首先原谅我这个标题党,但是我有一个疑惑一直没有解决,希望大家能帮下我
首先是一段代码
from multiprocessing import Process
import queue
def f():
q.put([3, None, 'dasda'])
# print(q.get())
if __name__ == '__main__':
q = queue.Queue()
p = Process(target=f,)
p.start()
print(q.get())
p.join()
代码挺简单的,我先说下自己的解释
首先在主进程生成一个线程队列q
开启一个子进程p
然后在子进程中操作主进程中的q,(这是不行的,因为进程间数据不共享,这里大家也都知道)
然后在主进程get
然后这段代码教程中是报错q未定义,我跑了一下是阻塞在q.get()这里了,然后f方法中没有报错,可以put也可以get
因为跟教程中不一样,所以找了一些朋友跑了一下,然后结果也是各有不同,
有的是直接报错q没有定义,有的是阻塞在下面的get为空的时候了
也就是说有的子进程里定义了q,有的子进程没有定义q
这是什么原因啊?有的系统是osx,有的是win,版本都是3.6
我的是osx,阻塞在get的时候了,我有个朋友用的win,也是阻塞了,
这里就产生了不同的意见,有的人觉得f里没有定义q,所以应该报错
但是我也有点疑惑,因为之前学进程了解到子进程中的数据和资源等等是拷贝自父进程的,所以说这里不报错是不是因为子进程中存在一个定义了的
q队列?如果这样解释就合理了,但是不明白为什么有的电脑报错,
如果这里操作的是主进程的q的话,那么这个报错未定义也是合理的,
所以希望大佬能帮我解疑
这个是朋友跑的报错
这是我跑的阻塞在get
有人能解答么???? |
|
|