我一直在尝试使用请求之外的并发命令,以便从多个不同的用户发送多个不同的直接消息。我设计的应用程序的目的是尽可能快地发送这些直接消息,并且单独发送每个请求花费的时间太长。
下面的代码是我尝试过的工作,但我清楚地发现,期货将不会读取存储在数组中的请求。
任何有关如何执行此操作的建议将不胜感激。
from concurrent import futures
import requests
from requests_oauthlib import OAuth1
import json
from datetime import datetime
startTime = datetime.now()
URLS = ['https://api.twitter.com/1.1/direct_messages/new.json'] * 1
def get_oauth():
oauth = OAuth1("xxxxxx",
client_secret="zzzxxxx",
resource_owner_key="xxxxxxxxxxxxxxxxxx",
resource_owner_secret="xxxxxxxxxxxxxxxxxxxx")
return oauth
oauth = get_oauth()
req = []
def load_url(url, timeout):
req.append(requests.post(url, data={'screen_name':'vancephuoc','text':'hello pasdfasasdfdasdfasdffpls 1 2 3 4 5'}, auth=oauth, stream=True, timeout=timeout))
req.append(requests.post(url, data={'screen_name':'vancephuoc','text':'hello this is tweetnumber2 1 2 3 4 5 7'}, auth=oauth, stream=True, timeout=timeout))
with futures.ThreadPoolExecutor(max_workers=100) as executor:
future_to_url = dict((executor.submit(req, url, 60 ), url)
for url in URLS)
for future in futures.as_completed(future_to_url):
url = future_to_url[future]
print ("DM SENT IN")
print (datetime.now()-startTime)
try:
data = future.result()
except Exception as exc:
print('%r generated an exception: %s' % (url, exc))
else:
print('%r page is %d bytes' % (url, len(data)))
可能值得看一下一些现有的库,这些库试图简化与并发的使用requests
。
来自:http : //docs.python-requests.org/en/latest/user/advanced/#blocking-or-non-blocking
[..]有很多项目将Requests与Python的异步框架之一结合在一起。grequests和request-futures是两个很好的例子。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句