鱼C论坛

 找回密码
 立即注册
查看: 2454|回复: 3

进程间的通信

[复制链接]
发表于 2019-10-24 19:55:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
from multiprocessing import Process,Queue

def plus():
    global g_num
    g_num += 50
    q.put(g_num)
    print(g_num)

def minus():
    global g_num
    g_num=q.get(True,2)
    g_num -= 50
    print(g_num)

if __name__ == '__main__':
    g_num = 100
    q = Queue()
    process = [Process(target=eval(i)) for i in 'plus minus'.split()]
    for i in process:
        i.start()
    for i in process:
        i.join()


E:\Users\Administrator\PycharmProjects\Python\venv\Scripts\python.exe F:/新建文件夹/未命名.py
Process Process-1:
Traceback (most recent call last):
  File "E:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\multiprocessing\process.py", line 297, in _bootstrap
    self.run()
  File "E:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\multiprocessing\process.py", line 99, in run
    self._target(*self._args, **self._kwargs)
  File "F:\新建文件夹\未命名.py", line 5, in plus
    g_num += 50
NameError: name 'g_num' is not defined
Process Process-2:
Traceback (most recent call last):
  File "E:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\multiprocessing\process.py", line 297, in _bootstrap
    self.run()
  File "E:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\multiprocessing\process.py", line 99, in run
    self._target(*self._args, **self._kwargs)
  File "F:\新建文件夹\未命名.py", line 11, in minus
    g_num=q.get(True,2)
NameError: name 'q' is not defined

Process finished with exit code 0


一直报错说 q 没定义
可 q=Queue()
不是定义了么

求大神解惑
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-10-24 20:01:17 | 显示全部楼层
我运行没有报错?试下这样:

  1. from multiprocessing import Process,Queue

  2. if __name__ == '__main__':
  3.     def plus():
  4.         global g_num
  5.         g_num += 50
  6.         q.put(g_num)
  7.         print(g_num)

  8.     def minus():
  9.         global g_num
  10.         g_num=q.get(True,2)
  11.         g_num -= 50
  12.         print(g_num)
  13.     g_num = 100
  14.     q = Queue()
  15.     process = [Process(target=eval(i)) for i in 'plus minus'.split()]
  16.     for i in process:
  17.         i.start()
  18.     for i in process:
  19.         i.join()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-24 20:09:46 | 显示全部楼层
多进程通信,一般是要把队列给args传入的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-25 12:44:02 | 显示全部楼层
zltzlt 发表于 2019-10-24 20:01
我运行没有报错?试下这样:

感谢大佬
用了您给的代码
可还是报错了
我用cmd pycharm 都试了
都这样 报相同的错误
不会是我的Python出问题了吧

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "E:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\multiprocessing\spawn.py", line 105, in spawn_
main
    exitcode = _main(fd)
  File "E:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\multiprocessing\spawn.py", line 115, in _main
    self = reduction.pickle.load(from_parent)
AttributeError: Can't get attribute 'plus' on <module '__mp_main__' from 'F:\\新建文件夹\\未命名.py'>
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "E:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\multiprocessing\spawn.py", line 105, in spawn_
main
    exitcode = _main(fd)
  File "E:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\multiprocessing\spawn.py", line 115, in _main
    self = reduction.pickle.load(from_parent)
AttributeError: Can't get attribute 'minus' on <module '__mp_main__' from 'F:\\新建文件夹\\未命名.py'>
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-1-20 08:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表