Skip to main content
 首页 » 编程设计

python之如何在 Python 网络机器人中有效地实现多线程/多处理

2024年08月25日33mfryf

假设我有一个用 python 编写的网络机器人,它通过 POST 请求将数据发送到网站。数据逐行从文本文件中提取并传递到数组中。目前,我正在通过一个简单的 for 循环测试数组中的每个元素。我怎样才能有效地实现多线程以更快地迭代数据。假设文本文件相当大。将线程附加到每个请求是否聪明?您认为解决此问题的最佳方法是什么?

with open("c:\file.txt") as file: 
     dataArr = file.read().splitlines() 
 
dataLen = len(open("c:\file.txt").readlines())-1 
 
def test(data): 
     #This next part is pseudo code 
     result = testData('www.example.com', data) 
     if result == 'whatever': 
          print 'success' 
 
for i in range(0, dataLen): 
    test(dataArr[i]) 

我正在考虑与此类似的事情,但我觉得这会导致问题,具体取决于文本文件的大小。我知道存在允许最终用户在处理大量数据时指定线程数量的软件。我不完全确定它是如何工作的,但这是我想要实现的。

import threading 
 
with open("c:\file.txt") as file: 
     dataArr = file.read().splitlines() 
 
dataLen = len(open("c:\file.txt").readlines())-1 
 
def test(data): 
     #This next part is pseudo code 
     result = testData('www.example.com', data) 
     if result == 'whatever': 
          print 'success' 
 
jobs = [] 
 
for x in range(0, dataLen): 
     thread = threading.Thread(target=test, args=(dataArr[x])) 
     jobs.append(thread) 
 
for j in jobs: 
    j.start() 
for j in jobs: 
    j.join() 

请您参考如下方法:

这听起来像是multiprocessing.Pool

的配方

参见此处:https://docs.python.org/2/library/multiprocessing.html#introduction

from multiprocessing import Pool 
 
def test(num): 
    if num%2 == 0: 
        return True 
    else: 
        return False 
 
if __name__ == "__main__": 
    list_of_datas_to_test = [0, 1, 2, 3, 4, 5, 6, 7, 8] 
 
    p = Pool(4)  # create 4 processes to do our work 
    print(p.map(test, list_of_datas_to_test))  # distribute our work 

输出如下:

[True, False, True, False, True, False, True, False, True, False]