1.进程,首先说了一下进程怎么写的,这个和线程写的不一样
import multiprocessing data_list = [] def task(arg): data_list.append(arg) print(data_list) def run(): for i in range(10): p = multiprocessing.Process(target=task,args=(i,)) # p = threading.Thread(target=task,args=(i,)) p.start() if __name__ == '__main__': run()
2。进程间的数据共享,本来是不可共享的
import multiprocessing 这是线程模块 import threading import queue 本来是queue。Queue是一个队列,但是线程好使,在这不好使了 import time q = multiprocessing.Queue() def task(arg,q): q.put(arg) def run(): for i in range(10): p = multiprocessing.Process(target=task, args=(i, q,)) p.start() while True: v = q.get() print(v) run()
# ##################### 进程间的数据共享:Manager ##################### """ def task(arg,dic): time.sleep(2) dic[arg] = 100 if __name__ == '__main__': m = multiprocessing.Manager() dic=m.dic() 这是一个字典 只有这个字典才通用 d={}这样在这写不行,不能大家一起用 process_list = [] for i in range(10): p = multiprocessing.Process(target=task, args=(i,dic,)) p.start() process_list.append(p) while True: count = 0 for p in process_list: if not p.is_alive(): 。is_alive是否还活着 count += 1 if count == len(process_list): break print(dic) # ... """ 刚才用的manager中queue方法,