如何让进程修改python中传递给它的列表?
我有一些代码可以从api下载一些json。我必须浏览很多页面和请求。get非常慢,所以我尝试使用多处理来加快速度。这是我的密码:如何让进程修改python中传递给它的列表?,python,Python,我有一些代码可以从api下载一些json。我必须浏览很多页面和请求。get非常慢,所以我尝试使用多处理来加快速度。这是我的密码: def worker(mod, offset, totalpages, arr): stuff = [] for i in range(offset, totalpages, mod): data = requests.get("https://api.website.net?" + "page="
def worker(mod, offset, totalpages, arr):
stuff = []
for i in range(offset, totalpages, mod):
data = requests.get("https://api.website.net?" + "page=" + str(i)).json()
try:
stuff += data["list"]
except KeyError:
pass
print(str(i + 1) + " pages downloaded")
for x in stuff:
arr.append(x)
def getdata(threads):
totalPages = requests.get("https://api.website.net?page=0").json()["totalPages"]
proccesses = []
items = []
for i in range(threads):
p = multiprocessing.Process(target=worker, args=(threads, i, totalPages, items))
p.start()
proccesses.append(p)
for p in proccesses:
p.join()
print(items)
getdata(4)
这最终会打印一个空数组,即使我正在使用append,它应该会更改引用的列表。是否有任何方法可以更改代码,以便worker修改传递给它的数组,而不是什么都不做
编辑:我想出来了,我必须使用multiprocessing.Manager()创建一个所有线程都可以访问的列表。使用
multiprocessing.Manager()
要创建一个所有线程都可以访问的列表
,您的代码可能会被简化,以便我们更快更容易地理解它。您是否尝试过在arr.append(x)
行之前在循环内为x in stuff打印arr
,它只打印在该线程中获得的数据。单独的线程似乎都有自己独特的arr版本,我似乎无法让它们都访问同一个变量。如果远程服务器运行缓慢,则通过添加并行性来阻塞它。如果你的网络很慢,那你就是在阻塞网络。