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 >>>
这样就安心了,看来方法还不错。
时间: 2024-10-04 02:07:09