[python]多进程介绍和使用

# 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,先完成的进程先打印

猜你喜欢

转载自blog.csdn.net/qq_38065133/article/details/82814298
今日推荐