Python多线程输出格式粘连怎么处理,python多线程,在多线程中调用同一个函数
Python多线程输出格式粘连怎么处理,python多线程,在多线程中调用同一个函数
在多线程中调用同一个函数print数据的时候,界面很乱
代码如下:
def test(url): print urlpool = ThreadPool(10)for url in self.urls: pool.add_job(test,url)pool.wait(numtasks=10)
如图所示
如果需要在test函数中使用临界区,那岂不是很麻烦吗?
如下虽然使用锁机制来解决了:
self.mutex = threading.Lock()....def test(url): time.sleep(1) self.mutex.acquire() print url self.mutex.release()pool = ThreadPool(10)for url in self.urls: pool.add_job(test,url)pool.wait(numtasks=10)
毕竟,在项目中类似test的函数有很多。
不知道有没有更好的解决办法?
其实这也就是为什么我们学并发编程的时候要多线程和互斥体一起学, 因为互斥体就是用来标志资源的使用情况, 解决线程切换时乱掉的弊端的. 其实mutex不算繁复. 如果你希望能更自动话一点, 我建议你可以给你那些函数都加一个decorator.
比如把你上面的代码改成装饰器的形式就变成这样:
self.mutex = threading.Lock()....def add_mutex(func): def decor(*args, **kwargs): time.sleep(1) self.mutex.acquire() func(*args, **kwargs) self.mutex.release() return decor@add_mutexdef test(url): print urlpool = ThreadPool(10)for url in self.urls: pool.add_job(test,url)pool.wait(numtasks=10)
这是一个挺pythonic的做法. 希望我没有理解错你的意思.
编橙之家文章,
相关内容
- Python re正则表达式空格替换问题,python正则表达式,st
- Python快速搭建网站模板有吗,python搭建模板,PHP模板很多
- rss阅读器可以做到同步更新吗?,rss阅读器做到同步
- for循环方式完成列表分区间统计效果报错,求解,for分
- 网页编码gb2312和gbk的pyquery中文乱码问题,gb2312pyquery,生
- Python测试HTTP客户端程序实例怎么写,python客户端程序
- errorclass errorvalue是什么情况,mysqldb连接mysql时的报错信息
- 编译安装Python 2.7.6版本后,上下左右退格就变成乱码如何
- Python语言能获取到APP中的data吗?要怎么写这个源码,
- 有API可以获取facebook专页时间线的数据吗,facebook专页
评论关闭