python multiprocessing创建的进程,那么子进程会在主进程退出时继续运行,直到它们完成执行?还是强制结束子进程?没有调用join,如果是线程的话,也是一样的吗?
不知道你这个问题是否已经解决, 如果还没有解决的话:Queue模块中提供了同步的、线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先级队列PriorityQueue
对于多线程,使用join()后,也会并发执行,下面程序的结果中,若一直执行一个线程,那么两次显示的程序号不应交替出现
下面的多进程相当与,两个工作同时进行,相当于并行执行;多线程相当于,串行并发,
import multiprocessing as mp
import threading as td
import time
def job(q, m):
res = 0
print("当前线程:", m, ':', time.time())
for i in range(10000000):
res += i
q.put(res)
print("当前线程:", m, ':', time.time())
def multithd():
q = mp.Queue()
p1 = td.Thread(target=job, args=(q, 1))
p2 = td.Thread(target=job, args=(q, 2))
p2.start()
p1.start()
p1.join() # # 当前线程结束后才执行其他线,
p2.join()
res1 = q.get()
print(res1)
if __name__ == '__main__':
multithd()
结果中同一个标号的线程表示线程执行的结束开始时间。
耗时:多线程≈普通>多进程
import multiprocessing as mp
import threading as td
import time
T_all_start = time.time()
def job(q, m):
res = 0
T_STA = time.time()
for i in range(100000000):
res += i
q.put(res)
T_END = time.time()
print("当前耗时:", m, ':', T_END - T_STA)
print('距离最开始耗时:',time.time() - T_all_start)
def multithd():
q = mp.Queue()
p1 = td.Thread(target=job, args=(q, 1))
p2 = td.Thread(target=job, args=(q, 2))
p3 = mp.Process(target=job, args=(q, 3))
p4 = mp.Process(target=job, args=(q, 4))
p2.start()
p1.start()
p4.start()
p3.start()
p1.join() # # 当前线程结束后才执行其他线,
p2.join()
p3.join()
p4.join()
def normal(m):
res = 0
T_STA = time.time()
for _ in range(2):
for i in range(100000000):
res += i
T_END = time.time()
print("当前:", m, ':', T_END - T_STA)
print('距离最初耗时:',time.time() - T_all_start)
if __name__ == '__main__':
multithd()
normal(5)
1,2表示多线程,3,4表示多进程,5为建立线程和进程,注意的是,都是并行的,不应该时间相加,