多线程下的print换行问题

2013-12-28 14:23:49 +08:00
 pc10201
楼主用多线程写了一个百度批量查收录的小工具,命令行界面,结果直接print输出

print '%s--OK' %url

在pycharm的console是没有问题的
然后双击在cmd中输出
偶尔会出现
xxx--OKxxx--OK

xxx--OKxxx--OK

xxx--OK
xxx--OK
中间会丢一些换行符,正常的应该如下所示啊
xxx--OK
xxx--OK
xxx--OK
xxx--OK
xxx--OK

而且感觉有时cmd下输出有卡顿的感觉,尤其数据比较大的情况,求解~
3440 次点击
所在节点    Python
10 条回复
binux
2013-12-28 14:29:21 +08:00
用logging
34D
2013-12-28 14:38:30 +08:00
后面加个,吧。
9hills
2013-12-28 15:09:23 +08:00
print 不是线程安全的,有几种办法

1. 用logging模块,这个是线程安全的
2. 自己实现一个线程安全的print, 这个较困难,所以最好是先线程安全的输出到某个变量(加锁之类),然后在最后再写入文件
clino
2013-12-28 15:22:54 +08:00
可以用gevent,这样就不用考虑线程安全了
min
2013-12-28 16:47:44 +08:00
多线程抢console,这很不科学啊
再说很多输出,肉眼也看不过来啊
不如不要输出
pandada8
2013-12-28 17:59:34 +08:00
用Logging
Ricepig
2013-12-29 14:51:49 +08:00
ui仅在单个线程更新不是基本原则么?
ksc010
2013-12-29 21:34:45 +08:00
是有这个问题 原来也遇到过
我当时是自定义一个print
import thread
mylock = thread.allocate_lock()
def tprint(_str):
mylock.acquire()
print _str
mylock.release()
pc10201
2013-12-31 09:32:30 +08:00
@9hills 谢谢你的提醒,我先输出到变量output='%s--OK' %url 然后再print output
基本就不会出现换行丢失的问题了
9hills
2013-12-31 10:16:47 +08:00
@pc10201 别忘了给这个变量加锁'否则不是线程安全的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/94851

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX