总结:进程之间不能共享数据,线程之间是可以共享数据的,如果想要的功能是IO密集型的则建议用多线程,少了进程切换时间,任务之间并发执行;如果功能是计算密集型的,则建议用多线程,线程之间是互相独立的,互不影响,cpu会并行执行任务

1. python多进程举例

# 参考来源https://zhuanlan.zhihu.com/p/43073153
from multiprocessing import Pool
import os,time

def func(n):
   print(n)
   time.sleep(5)

if __name__ == '__main__':
   p = Pool(processes=5) # process设置进程数量,不设置的时候系统自动分配任务给cpu
   for i in range(50):
       p.apply_async(func=func,args=(i,))  #异步
   p.close()
   p.join()  #异步调用apply_async,需要添加这一行

   注意该任务是在有一个__main__里面执行的,执行该任务的时候,打开任务管理器查看进程数量, 如下可以看到系统起了多个进程,数量不是5,是因为我后台还有其他任务在执行

2. python多线程举例




import requests
from queue import Queue
import threading
import time

class Producer(threading.Thread):

    def __init__(self, page_q, *args, **kwargs):
        super(Producer, self).__init__(*args, **kwargs)
        self.page_q = page_q

    def run(self):
        while True:
            if self.page_q.empty():
                break
            url = self.page_q.get()
            print(url)
            time.sleep(5)
if __name__ == '__main__':
    page_q = Queue(100)
    for i in range(1, 50):
        page_q.put((i))

    for x in range(5):
        pr = Producer(page_q)
        pr.start()

  执行该代码块,会看到下面会多出来一个进程,也就是说这段代码是单进程多线程的执行方式,参考来源

https://blog.csdn.net/qq_42285296/article/details/90671979?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~first_rank_v2~rank_v25-5-90671979.nonecase&utm_term=requests%E4%BD%BF%E7%94%A8%E5%A4%9A%E7%BA%BF%E7%A8%8B 



原创文章,转载请注明出处:http://124.221.219.47/article/multprocess/