注意是python 2.7, (multiprocessing值支持到2.6,2.7下安装会报错)
用threadpool试了一下,总是报错:
data = ['a', 'b', 'c']
#data传到threadpool.makeRequests里面的第二个参数,函数会将这个列表里面的值取出来,然后根据并发数进行并发。
def repost(data):
response = requests.post(url, data).text
return response
def postresult(requestself, responseresult):
print(responseresult)
#其他的处理,比如对结果插入到数据库,或者写入日志等,可以在这里写
pool = threadpool.ThreadPool(5)
requests = threadpool.makeRequests(repost, data, postresult)
**#之前出问题,是因为这里requests的名称定义和requests()方法冲突了。。。然后报错又很奇怪,没引起注意,把这里的requests改个名字就OK了。各位,承让了。
当然,下面这一样,也改一下。requests的名称。
[pool.putRequest(req) for req in requests]
pool.wait()
报错如下:
Traceback (most recent call last):
File "C:\User\AppData\Local\Programs\Python\Python35-32\lib\site-packages\threadpool.py", line 158, in run
result = request.callable(*request.args, **request.kwds)
File "C:\test.py", line 29, in repost
response = requests.post(url, data1).text
AttributeError: 'list' object has no attribute 'post'
或者有没有其他实现方法?
我靠,我靠,我靠靠靠。。。。问题解决了。看上面的备注。再见。
먼저 test.py 전체를 붙여넣으면 오류 메시지에서 요청 변수를 덮어써야 요청이 목록 유형이 됩니다.
다중 동시성을 구현하기 위해서는 ThreadPool을 사용하지 않는 것이 좋습니다. Python의 특성상 멀티스레딩을 사용하더라도 동시에 하나의 명령만 실행할 수 있으며, 멀티스레딩의 성능 향상은 다음과 같습니다. 제한된.
먼저 네트워크를 비동기식으로 만든 다음 기본 ioloop를 구현해야 합니다. asyncio 또는 tornado를 기반으로 단일 스레드 다중 동시성을 구현할 수도 있습니다
2.7에는 asyncio가 없고 gevent 등을 사용할 수 있으며 다중 처리가 필요한 수십 개의 2.7이 있지만 IO 집약적이며 다중 프로세스를 사용하면 비생산적입니다. 코루틴을 구현합니다.