gpt4 book ai didi

python-2.7 - 阅读推文中缩短的网址(https://t.co)的最快方法(数百种)

转载 作者:可可西里 更新时间:2023-11-01 16:46:37 26 4
gpt4 key购买 nike

我正在阅读数以百计的tweets并检查这些tweets中缩短的url。
只是一个简单的代码流:
线程:

def worker(tweets):
for tweet in tweets:
find shortened urls in tweet
result= process these urls (read the response body)

主要流程:
Block till all threads are done
Collect these results

目前,我正在使用多线程,这在一定程度上减少了时间。例如,对于100条网址缩短的tweets,我大约需要320秒来处理它们。但是,如果我使用多线程,我可以用50个线程将这段时间缩短到24秒左右。在那之后,即使我去100个我能理解的线程,速度也没有提高。
我的代码中最耗时的部分是读取缩短的url,将其解析为实际的url,然后使用goose读取它们。
实际代码:
def worker(result_queue, input_tweet_queue):

queue_full = True
while queue_full:
try:
item = input_tweet_queue.get(False)
urls = re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+',
item['text'])
for url in urls:
try:
res = urllib2.urlopen(url)
actual_url = res.geturl()
if 'twitter.com' not in actual_url:
g = Goose() # Its defined somewhere else in real
content_of_url = g.extract(actual_url)
result = process(content_of_url)
result_queue.put(result)
except:
invalid_url = True
except Queue.Empty:
queue_full = False

主要流程:
result_queue = Queue.Queue()
input_tweet_queue = Queue.Queue()

# Place all tweets in a queue
for item in tweets:
tweet_queue.put(item)

# Create threads and start them
thread_count = 50
for i in range(thread_count):
t = threading.Thread(target=worker, args=(result_queue, input_tweet_queue))
t.daemon = True
t.start()

# Collect the results
final_result = []
index = 0
for tweet in tweets:
result[index] = q.get()
index = index + 1

当前性能:
Tweets  Threads Execution-Time(Seconds)
100 1 340
100 5 66
100 10 44
100 50 24
100 100 23

时间消耗的主要罪魁祸首是解析这些缩短的url并读取它们。
有没有更好的方法来完成这项任务?我可以在其中嵌入任何非阻塞IO吗?或者我可以使用 non-blockingio方法而不是多线程?

最佳答案

我会尝试grequests模块:https://github.com/kennethreitz/grequests
非常愉快的文件和易于使用。

关于python-2.7 - 阅读推文中缩短的网址(https://t.co)的最快方法(数百种),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45816675/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com