Python 多线程问题

这篇博客探讨了Python中多线程的两种常见实现:通过threading和multiprocessing.dummy的Pool线程池。重点讨论了多线程下数据库存储时遇到的锁问题,解释了为何需要锁以及如何实现。同时,给出了一个使用requests实现的搜狗词库爬虫例子,并指出线程池和Manager().Queue结合使用的优点。
摘要由CSDN通过智能技术生成

引言

最近在学习Python爬虫,发现Scrapy框架是解决了Python多线程问题,不用自己去理解多线程,只需遵循它的框架来写就行了。但是在我用requests爬虫的时候,就要自己编写多线程的逻辑了,还是需要去查资料好好理解一下的。

个人理解

1. python的多线程常用的有两种:

(1) 正常的启动多个thread,每个线程跑一个任务,进程间用队列queue通信。具体实现如下:
def put_to_queue(arg1,arg2):
	......
	# queue有两种存数据的方法,一种是put(),这种方法在队列满的时,会一直等待,直到队列有
	# 空位置可以放数据。另一种是put_nowait(),这种方法会在队列满时,抛出异常。同样取数据
	# 也有get()和get_nowait(),get_nowait()会在队列空时,抛出异常。
	queue.put_nowait(data)
	
def get_from_queue(arg1):
	......
	while True:
		try:
			data = queue.get_nowait() # 循环取出数据,如果队列为空,则抛出异常
			......
			queue.task_done() # 操作完成,标记该数据已从队列取出
		except:
			print('queue is empty wait for a while')

if __name__ == '__main__':
	......
	put_thread = Thread(target=put_to_queue,args=(ar
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值