首页 > 代码库 > 优美地启动多线程[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
>>>


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




优美地启动多线程[Python]