python - 多处理和全局 True/False 变量

标签 python global-variables multiprocessing

我正在努力了解多处理并将全局 True/False 变量传递到我的函数中。

在 get_data() 完成后,我希望 analysis() 函数启动并处理数据,同时 fetch() 继续运行。我怎样才能使这项工作?时间差

import multiprocessing

ready = False


def fetch():
    global ready
    get_data()
    ready = True
    return


def analysis():
    analyse_data()

if __name__ == '__main__':
    p1 = multiprocessing.Process(target=fetch)
    p2 = multiprocessing.Process(target=analysis)
    p1.start()
    if ready:
        p2.start()

最佳答案

您应该运行这两个进程并使用共享队列在它们之间交换信息,例如在其中一个进程中发出操作完成信号。

此外,您需要有一个 join() 语句来正确等待您生成的进程完成。

from multiprocessing import Process, Queue
import time

def get_data(q):
  #Do something to get data
  time.sleep(2)
  #Put an event in the queue to signal that get_data has finished
  q.put('message from get_data to analyse_data')

def analyse_data(q):
  #waiting for get_data to finish...
  msg = q.get()
  print msg #Will print 'message from get_data to analyse_data'
  #get_data has finished

if __name__ == '__main__':
  #Create queue for exchanging messages between processes
  q = Queue()
  #Create processes, and send the shared queue to them
  processes = [Process(target=get_data,args(q,)),Process(target=analyse_data,args=(q,))]
  #Start processes
  for p in processes:
    p.start()
  #Wait until all processes complete
  for p in processes:
    p.join()

关于python - 多处理和全局 True/False 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34916750/

相关文章:

python - 我可以在 fork 新进程之前初始化tornado IOLoop.instance吗?

单核处理器与多核处理器上的多线程和多任务处理

Python Beautiful Soup 和 urllib.request - 如何通过 Steam 年龄检查

javascript - 使用正则表达式替换文本

python - Google App Engine WebApp/Python 自定义 404 处理程序实现

python - 正则表达式匹配以下模式

全局范围内的两个对象可以同名吗?

javascript - 我无法从 jquery ajax 函数返回 JSON 变量

java - 外部可见但不可修改,但内部可修改?

windows - OpenMp 不使用所有 CPU(双路、windows 和 Microsoft visual studio)