如何使这个python程序多处理或多线程

如何使这个python程序多处理或多线程,python,Python,我有这个python程序,现在我想为它做多处理或多线程。请帮我做到这一点 import os, sys, codecs, random, time ,subprocess years = ["2016","2017","2018","2019","2020"] rf = open('URL.txt', 'r') lines = rf.readlines() rf.close() list = []

我有这个python程序,现在我想为它做多处理或多线程。请帮我做到这一点

import os, sys, codecs, random, time ,subprocess
years = ["2016","2017","2018","2019","2020"]
rf = open('URL.txt', 'r')
lines = rf.readlines()
rf.close()
list = []
for element in lines:
    list.append(element.strip())
files=["myfile1.txt","myfile2.txt"]
for url in list:
    for year in years":
        for file in files:
            os.system('python myfile.py -u' +url+ ' -y' +year+ '-f' +file)
            time.sleep(5)
我想在一个进程或一个线程中完成一个url。

您可以添加:

from multiprocessing import Pool
您可以将您的工作划分为一个函数:

def myfunc(url, year, file):
    os.system('python myfile.py -u' +url+ ' -y' +year+ '-f' +file)
def myfunc(url):
    for year in years:
        for file in files:
            os.system('python myfile.py -u' +url+ ' -y' +year+ '-f' +file)
然后,代替循环,您将创建一个参数元组列表,并使用
starmap
将其发送到一个池:

pool = Pool(4)  # <== number of processes to run in parallel
args = [(url, year, file) for url in lst for year in years for file in files]
pool.starmap(myfunc, args)
然后只使用URL调用它-因为这只是一个参数,您不再需要
starmap
,只需
map
就可以了,URL列表也可以了

pool.map(myfunc, lst)

但是,如果年份和文件可以并行独立完成,那么就没有太多理由用这种方式进行划分,因为粗粒度划分可能意味着作业需要更长的时间才能完成(有些进程最终是空闲的,而有些进程仍然在处理因某种原因而缓慢的URL)。我仍然建议采用第一种方法。

问题出在哪里?你不明白吗?我不完全理解如何在我当前的程序中实现这一点。请不要使用
list
作为变量名。这是一种非常糟糕的做法,并且会导致更多的问题,因为list是python中预定义的数据类型,并且会导致冲突。此外,如果您无法解决问题,请尝试从您这边解决问题,并在尝试后发布错误。这不是免费的代码服务。你到底在挣扎什么?第一个例子是这样的:从多处理导入池def(x):如果name='main',则返回x*x:池(5)作为p:print(p.map(f[1,2,3]),但我这里没有任何函数