【发布时间】:2014-08-19 10:45:08
【问题描述】:
我有以下代码
from multiprocessing import Process, Queue
from queue import Empty
from time import sleep
def f(q):
n = 100000000
while n != 100000000 // 2:
n -= 1
q.put("the awkening!")
print("my work here is done")
def main():
q = Queue()
p = Process(target=f, args=(q,))
p.start()
while True:
try:
print(q.get(block=False))
raise systemexit
except Empty:
print("i found nothing :(")
sleep(2)
p.join()
如果我添加
if __name__ == '__main__':
main()
到最后然后使用python script_name.py 运行它,一切正常。但是,如果我只是使用python -i script_name.py 运行脚本然后运行main() Python 抱怨:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\Python34\lib\multiprocessing\spawn.py", line 98, in spawn_main
exitcode = _main(fd)
File "C:\Python34\lib\multiprocessing\spawn.py", line 108, in _main
self = pickle.load(from_parent)
AttributeError: Can't get attribute 'f' on <module '__main__' (built-in)>
错误来自子进程,主进程运行正常。
这没什么大不了,但我想知道为什么会这样,如果它可以在交互模式下工作就好了
【问题讨论】: