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方法,