Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.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_Multithreading_Multiprocessing - Fatal编程技术网

使用Python同时为列表中的每个项运行函数

使用Python同时为列表中的每个项运行函数,python,multithreading,multiprocessing,Python,Multithreading,Multiprocessing,我有一个包含500多个元素的列表,我想同时为列表中的每个元素运行一个函数,我该怎么做 该解决方案将加快进程,而且我的代码将更短 我为Instagram使用一个库,从该库获取值需要很多时间。我已经通过线程管理了它的速度,但我正在处理列表中的大量值。每个元素都是一个用户名,所以我想同时访问500个用户的个人资料,并从中收集一些数据(张贴图片、评论数量、喜欢的数量……) 对于每个用户,收集数据大约需要1-2秒。这意味着为1000个用户收集数据需要1000-2000秒。 所以,我试图通过对列表中的每个项

我有一个包含500多个元素的列表,我想同时为列表中的每个元素运行一个函数,我该怎么做

该解决方案将加快进程,而且我的代码将更短

我为Instagram使用一个库,从该库获取值需要很多时间。我已经通过线程管理了它的速度,但我正在处理列表中的大量值。每个元素都是一个用户名,所以我想同时访问500个用户的个人资料,并从中收集一些数据(张贴图片、评论数量、喜欢的数量……)

对于每个用户,收集数据大约需要1-2秒。这意味着为1000个用户收集数据需要1000-2000秒。 所以,我试图通过对列表中的每个项目同时运行相同的函数来加快这个过程

我读了一些关于
线程化的文章,我做了一些类似的东西,但如果我在列表中有500个元素呢

import threading

list_of_results = []
list_of_values = [1,2,3]

def one(list_of_values, list_of_results):

    result = 0
    for i in range(0,5000):
        result = list_of_values[0] + i

    list_of_results.append(result)

def two(list_of_values, list_of_results):

    result = 0
    for i in range(0,5000):
        result = list_of_values[1] + i

    list_of_results.append(result)

def three(list_of_values, list_of_results):

    result = 0
    for i in range(0,5000):
        result = list_of_values[2] + i

    list_of_results.append(result)

t1 = threading.Thread(target = one, args = (list_of_values, list_of_results))
t2 = threading.Thread(target = two, args = (list_of_values, list_of_results))
t3 = threading.Thread(target = three, args = (list_of_values, list_of_results))

t1.start()
t2.start()
t3.start()

t1.join()
t2.join()
t3.join()

print(list_of_results)

你不能一次做500次手术。你的电脑是顺序的。该线程可能会帮助您进行更复杂的操作=>它将在您的每个PC内核上创建一个进程

看起来您需要在另一个for循环中编写一个for循环

你到底想用这500个元素做什么

也许你需要这样的东西

for j in range(0, 500)
    for i in range(0,5000):
        result = list_of_values[j] + i

那不是我需要的。我为Instagram使用一个库,从该库获取值需要很多时间。我已经通过
线程管理了它的速度,但我正在处理列表中的大量值。每个elemet都是一个用户名,因此我想在您查找
多处理.Pool
,特别是
Pool.imap(我的函数,我的列表)
的同时转到500个用户的配置文件。但是,你应该弄清楚什么需要很多时间:从你说的话来看,似乎是instagram或你的netwrok,一次查询500次可能不会比顺序方法快。你的问题太广泛了。对于任何速度提升,都应首先确定“瓶颈”。这里总结了最常见的限制类型:我已经编辑了这个问题。