|
|
20鱼币
本帖最后由 hjx123hjx 于 2019-6-4 17:24 编辑
先贴下我的代码
- import requests
- import threading
- def threaded_crawler(max_threads=5):
- def get_text(data):
- nonlocal i
- i += 1
- url = 'http://httpbin.org/post'
- print('old offset ', data['offset'])
- resp = requests.post(url, data=data)
- print('new offset ', data['offset'])
- i = 0
- threads = []
- while True:
- # 检查线程池
- for thread in threads:
- if not thread.is_alive():
- # 移除执行完毕的线程
- threads.remove(thread)
- # 小于最大线程数时添加线程
- while len(threads) < max_threads:
- data['offset'] += 1
- thread = threading.Thread(target=get_text, args=(data,))
- thread.setDaemon(True)
- thread.start()
- threads.append(thread)
- # 堵塞线程
- for thread in threads:
- thread.join()
- # 退出循环
- if i == 8:
- break
-
- def main():
- threaded_crawler()
- data = {
- 'offset': 0
- }
- main()
- input()
复制代码
执行效果如下图:
我想要的效果是每次传入的data['offset']参数分别为1-8,执行效果可以看到传入requests.post之前还是不同的,传入的时候就变成统一的5和8了。。
这是怎么回事?为什么在requests.post这里几个线程要卡住然后再一起执行?希望大佬解释一下多线程的执行步骤。。谢谢!!
方便的话提点一下怎么改才能达到我想要的效果。。
你声明了nonlocal i,所以当多线程执行的时候,不同线程的i的值会互相影响
|
最佳答案
查看完整内容
你声明了nonlocal i,所以当多线程执行的时候,不同线程的i的值会互相影响
|