[python]寻找漂亮地启动多线程的方法

lsjfdjoijvtghu 2014-08-22 09:04:27
这是我的:
python在多线程时,假如写了一个叫iamthreading的继承了多线程的类,如何启动它,就是个问题了。

这是什么问题呢?启动不这样嘛?

for i in xrange(threads_num):  
t = iamthreading()
threads.append(t)
for i in xrange(threads_num):
threads[i].start()
for i in xrange(threads_num):
threads[i].join()


但是,不觉得太难看了吗?长久使用后,无法忍受,太难看了!

于是来个潇洒的->


while 1:
iamthreading().start()

一气呵成,可是,这样无法中止程序运行,停不下来,不满意。

于是,我这么写:


threads = [iamthreadingr() for i in xrange( threads_num )]
if [(j.setDaemon( True ), j.start()) for j in threads] == [i.join() for i in threads]:
print 'all wars are civil wars,because all men are brothers.'

借此摆脱难看的for排比句,但是看到 "=="等号,会不会右边的只计算了一个发现不等,就进入下一步了呢?
看看python会不会这么做:


>>> from Queue import Queue
>>> q = Queue(0)
>>> q.put(9)
>>> q.put(8)
>>> q.put(7)
>>> q.put(6)
>>> if [1, 2, 3] == [q.get() for i in xrange(3)]:
... print "hei hei"
...
>>> q.get()
6
>>>

看来好像不会,python会产生完整个list再去比较。
再试一试:


>>> from Queue import Queue
>>> q = Queue(0)
>>> q.put(9)
>>> q.put(8)
>>> q.put(7)
>>> q.put(6)
>>> if [1,2] == [q.get() for i in xrange(3)]:
... print "hei hei"
...
>>> q.get()
6
>>>

这样就安心了,看来方法还不错。

你有什么好方法呢?
...全文
157 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
重剑无锋,大巧不工
angel_su 2014-08-23
  • 打赏
  • 举报
回复
支持楼上,觉得没事挤在一行其实很难看,还是原先的好,稍微改一下... for i in range(threads_num): t = iamthreading(Daemon = True) threads.append(t) for t in threads: t.join()
panghuhu250 2014-08-23
  • 打赏
  • 举报
回复
引用

threads = [iamthreadingr() for i in xrange( threads_num )]  
if [(j.setDaemon( True ), j.start()) for j in threads] == [i.join() for i in threads]:  
        print 'all wars are civil wars,because all men are brothers.'  
“==”会误导读者,我需要去查join()的文档才明白这个比较是没有用的,只是要计算两个list comprehension。 原来的代码就挺好,清楚明白。也可以把头两个for合在一起,只用两个for。 另外,更pythonic的循环:

for t in theads:
  t.join()
The_Third_Wave 2014-08-22
  • 打赏
  • 举报
回复
楼主,实际应用好像看情况吧,不过楼主对Pythonic真执着啊!!!

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧