Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让进程修改python中传递给它的列表?_Python - Fatal编程技术网

如何让进程修改python中传递给它的列表?

如何让进程修改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="

我有一些代码可以从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=" + 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版本,我似乎无法让它们都访问同一个变量。如果远程服务器运行缓慢,则通过添加并行性来阻塞它。如果你的网络很慢,那你就是在阻塞网络。