Python怎么一个进程生产,多个进程队列处理生产出来的内容呢?

因为get_url比save_pic快,所以需要将获取到的直链分配给队列执行提升效率。
尝试了Queue的put,get,但是不知道为什么只执行对应进程数的get_url()部分,而save_pic部分并没有执行。

def get_url()
  # 读取excel内的链接,操作后生成下载直链
  ......
  if pic_url.status_code == 200:
    save_pic(down_url, pic_name, pic_id)
  elif pic_url.status_code == 400:
    # 重新获取下载直链
    ......
    save_pic(down_url, pic_name, pic_id)
  else:
    pass

def save_pic(down_url, pic_name, pic_id)
  # 判断并创建对应需储存的目录
  #  with open储存图片

您可以使用Python的多进程库multiprocessing来实现这个需求。在这种情况下,您可以使用一个进程负责获取URL,并将获取的URL放入一个队列中。然后,您可以使用多个进程并行地从队列中获取URL并执行save_pic()函数。

下面是一个示例代码,该代码使用4个进程来并行获取URL并执行save_pic()函数:

from multiprocessing import Process, Queue

def get_url(url_queue):
    # 读取excel内的链接,获取下载直链
    while True:
        # 获取URL
        url = ...
        url_queue.put(url)

def save_pic(url_queue):
    while True:
        url = url_queue.get()
        # 判断并创建对应需储存的目录
        # with open储存图片

if __name__ == '__main__':
    url_queue = Queue()
    get_url_process = Process(target=get_url, args=(url_queue,))
    get_url_process.start()
    save_pic_processes = []
    for i in range(4):
        p = Process(target=save_pic, args=(url_queue,))
        save_pic_processes.append(p)
        p.start()
    get_url_process.join()
    for p in save_pic_processes:
        p.join()

这样,get_url()进程就会不断地获取URL并将它们放入队列中,而4个save_pic()进程则会并行地从队列中获取URL并执行save_pic()函数。这样可以提高程序的性能。

看不出来你这应用哪里需要用到多进程,多线程不就足够了吗
你可以将get到的内容先塞进一个全局的list里,然后开个线程池去处理
当然你也可以每个get就直接save,然后多进程执行get

给那个获取url的分配一个线程,然后下载图片(I/O)操作建立个线程池,然后开启获取url的线程,即可解决你的下载速度小于获取速度。