# import os
# fork只能用于linux/unix中, fork会创建一个子进程
# pid = os.fork()
# print("bobby")
# if pid == 0: #子进程pid是0
# print('子进程 {} ,父进程是: {}.' .format(os.getpid(), os.getppid()))
# else:
# print('我是父进程:{}.'.format(pid))
fork出来一个子进程之后,就有两个进程一起进行了,一个主进程,一个子进程
所以会print 两次bobby
if判断里面 两个也都会打印
import multiprocessing
#建议还是优先使用进程池 ,进行编程
#多进程编程
import time
def get_html(n):
time.sleep(n)
print("sub_progress success")
return n
class GetHtml(multiprocessing): #多进程 和线程一样,可以使用类来编写
def run(self, n):
time.sleep(n)
print("sub_progress success")
return n
if __name__ == "__main__":
# progress = multiprocessing.Process(target=get_html, args=(2,))
# print(progress.pid)
# progress.start()
# print(progress.pid) #进程start之后,可以获取进程的pid
# progress.join()
# print("main progress end")
#使用线程池
pool = multiprocessing.Pool(multiprocessing.cpu_count())
# result = pool.apply_async(get_html, args=(3,))
#
# #等待所有任务完成
# pool.close() #要先close,禁止其他进程进来。才能join堵塞,等待所有进程完成
# pool.join()
#
# print(result.get()) # 获取进程结果,return值
#imap
# for result in pool.imap(get_html, [1,5,3]):
# print("{} sleep success".format(result))
# 这个打印顺序 是 1 5 3
for result in pool.imap_unordered(get_html, [1,5,3]):
print("{} sleep success".format(result))
#这个的打印顺序是 1 3 5,先完成的进程先打印