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

[python]寻找漂亮地启动多线程的方法
这是我的:
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  
>>>  

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

你有什么好方法呢?
------解决方案--------------------
楼主,实际应用好像看情况吧,不过楼主对Pythonic真执着啊!!!
------解决方案--------------------
引用

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()

------解决方案--------------------
支持楼上,觉得没事挤在一行其实很难看,还是原先的好,稍微改一下...
for i in range(threads_num):  
  t = iamthreading(Daemon = True)
  threads.append(t) 
for t in threads:  
  t.join()
------解决方案--------------------
重剑无锋,大巧不工