竹一笔记 2023-02-04 13:00 采纳率: 40.9%
浏览 33

python多进程报错

以下这段代码,在pycharm的终端和vscode中能正常运行,但是在pycharm的python console中运行报错。已在pycharm中更新过multiprocessing模块

from multiprocessing import Process, Queue
import time

def print_num(name, q):
    while not q.empty():
        print("{}\t\t{}".format(name, q.get()))
        time.sleep(0.1)


if __name__ == "__main__":
    q = Queue(20)
    for i in range(20):
        q.put(i)

    ps = []
    for i in range(4):
        p = Process(target=print_num, args=("进程 " + str(i), q))
        ps.append(p)

    for i in ps:
        i.start()
    for p in ps:
        p.join()
Traceback (most recent call last):
  File "C:\Users\spiderx\AppData\Roaming\Python\Python37\site-packages\IPython\core\interactiveshell.py", line 3553, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-2-9849d47c306e>", line 1, in <module>
    runfile('C:\\Users\\spiderx\\Documents\\python\\头条\\Demo.py', wdir='C:\\Users\\spiderx\\Documents\\python\\头条')
  File "C:\install\PyCharm\plugins\python-ce\helpers\pydev\_pydev_bundle\pydev_umd.py", line 198, in runfile
    pydev_imports.execfile(filename, global_vars, local_vars)  # execute the script
  File "C:\install\PyCharm\plugins\python-ce\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc)
  File "C:\Users\spiderx\Documents\python\头条\Demo.py", line 21, in <module>
    i.start()
  File "C:\Users\spiderx\AppData\Local\Programs\Python\Python37\lib\multiprocessing\process.py", line 112, in start
    self._popen = self._Popen(self)
  File "C:\Users\spiderx\AppData\Local\Programs\Python\Python37\lib\multiprocessing\context.py", line 223, in _Popen
    return _default_context.get_context().Process._Popen(process_obj)
  File "C:\Users\spiderx\AppData\Local\Programs\Python\Python37\lib\multiprocessing\context.py", line 322, in _Popen
    return Popen(process_obj)
  File "C:\Users\spiderx\AppData\Local\Programs\Python\Python37\lib\multiprocessing\popen_spawn_win32.py", line 89, in __init__
    reduction.dump(process_obj, to_child)
  File "C:\Users\spiderx\AppData\Local\Programs\Python\Python37\lib\multiprocessing\reduction.py", line 60, in dump
    ForkingPickler(file, protocol).dump(obj)
_pickle.PicklingError: Can't pickle <function print_num at 0x00000127DBEBE0D8>: attribute lookup print_num on __main__ failed
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:\Users\spiderx\AppData\Local\Programs\Python\Python37\lib\multiprocessing\spawn.py", line 105, in spawn_main
    exitcode = _main(fd)
  File "C:\Users\spiderx\AppData\Local\Programs\Python\Python37\lib\multiprocessing\spawn.py", line 115, in _main
    self = reduction.pickle.load(from_parent)
EOFError: Ran out of input

img

img

  • 写回答

2条回答 默认 最新

  • lidiyscrp 2023-02-04 14:17
    关注

    这是由于Pythonconsole中不支持多进程导致的。你可以尝试在pycharm中更改配置,让它支持多进程,或者尝试使用其他编辑器,如vscode。或可能是因为pythonconsole中不支持pickle序列化,可以尝试使用其他方法来替代pickle序列化,比如使用json序列化。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月4日

悬赏问题

  • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
  • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?
  • ¥15 python爬取bilibili校园招聘网站
  • ¥30 求解达问题(有红包)
  • ¥15 请解包一个pak文件
  • ¥15 不同系统编译兼容问题
  • ¥100 三相直流充电模块对数字电源芯片在物理上它必须具备哪些功能和性能?