优美地启动多线程[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
>>>

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

时间: 2024-10-04 02:07:09

优美地启动多线程[Python]的相关文章

Meme游戏服务器开发日记(二)绕过GIL启动多线程Python环境

说道Python和多线程,很容易想到GIL,GIL意味着只要是用Python做的多线程程序,就无法利用多个CPU. 经过一些失败的尝试后,我也一度认为GIL是无解的.我们甚至把注意力转向了IronPython等无锁Python,但是实际上那样问题可能更多,比如我们不熟悉mono,mono也没达到完全成熟的程度. 直到skynet的QQ群里一位朋友介绍了另一种加载so的方式,事情才有了180度的变化. 方法如下: 1.编译Python源码,编译时加上参数--enable-shared,编译成so动

ctrl+c关闭多线程python程序

项目中经常需要用到多线程,如果一个python程序用了多线程,当子线程没有结束时,用ctrl+c是关闭不了主线程的,这时候就只能用kill命令杀掉,这样会很麻烦. 所以探讨了下怎么ctrl+C关闭多线程python程序,也在网上查了很多别人的做法,自己做了很多实验,尝试了很多种方法,总结得出一个能用的方法就是,把子线程setDeamon(True),通过isAlive方法实现join的功能. 代码: #encoding=utf-8 __author__ = '[email protected]'

启动多线程的两种情况比较

启动多线程有两种方式:(都是在主线程main线程下) 1. 使用同一个线程对象来启多个线程 2. 使用多个线程对象来启多个线程 这两种方式有什么区别呢?先贴上代码举例说明: 这是使用线程对象MyRunnable的同一个实例r来启动了两个线程 MyRunnable r = new MyRunnable(); Thread ta = new Thread(r,"Thread-A"); Thread tb = new Thread(r,"Thread-B"); ta.st

python的_thread模块来实现多线程(<python核心编程例子>)

python中_thread模块是一个低级别的多线程模块,它的问题在于主线程运行完毕后,会立马把子线程给结束掉,不加处理地使用_thread模块是不合适的.这里把书中讲述的有关_thread使用的例子自己实现了一遍,做以记录. #例子一:自己手动在主线程中设置等待时间import _thread from time import ctime, sleep def loop0(): print("loop0 starts at:{}".format(ctime())) sleep(4)

【原创】编写多线程Python爬虫来过滤八戒网上的发布任务

目标: 以特定语言技术为关键字,爬取八戒网中网站设计开发栏目下发布的任务相关信息 需求: 用户通过设置自己感兴趣的关键字或正则表达式,来过滤信息. 我自己选择的是通过特定语言技术作为关键字,php.java和python. 注意:如果不选用正则表达式,就会把javascript也爬进来,那前端的信息就比较多了. 为什么要使用多线程: 网络烂,读网页时很容易阻塞,这个时候后面的工作都得等: 在保存页面时,有对硬盘I/O的需求,如果阻塞了也得等. 实现: 0.3个线程.一个线程A负责读取网页,一个线

一个简单的多线程Python爬虫

最近想要抓取拉勾网的数据,最开始是使用Scrapy的,但是遇到了下面两个问题: 前端页面是用JS模板引擎生成的 接口主要是用POST提交参数的 目前不会处理使用JS模板引擎生成的HTML页面,用POST的提交参数的话,接口统一,也没有必要使用Scrapy,所以就萌生了自己写一个简单的Python爬虫的想法. 一个爬虫的简单框架 一个简单的爬虫框架,主要就是处理网络请求,Scrapy使用的是Twisted(一个事件驱动网络框架,以非阻塞的方式对网络I/O进行异步处理),这里不使用异步处理,等以后再

Python 多线程threading模块

首先,我们在了解多线程时需要理解的就是什么是多线程,按照官方的解释就是:多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术. 在我自学到这里的时候,通过会在想进程和线程到底是有什么区别,我的理解就是: 进程就是一个应用程序在处理机上的一次执行过程,它是一个动态的概念,而线程是进程中的一部分,一个进程可以包含多个线程. 下面就以简单的例子来加强我们对python 线程的理解. 默认情况下,我们在没有启动线程的时候,可以看一下程序总的运行时间,应该是每个函数

python 并发执行之多线程

正常情况下,我们在启动一个程序的时候.这个程序会先启动一个进程,启动之后这个进程会拉起来一个线程.这个线程再去处理事务.也就是说真正干活的是线程,进程这玩意只负责向系统要内存,要资源但是进程自己是不干活的.默认情况下只有一个进程只会拉起来一个线程. 多线程顾名思义,就是同样在一个进程的情况同时拉起来多个线程.上面说了,真正干活的是线程.进程与线程的关系就像是工厂和工人的关系.那么现在工厂还是一个,但是干活的工人多了.那么效率自然就提高了.因为只有一个进程,所以多线程在提高效率的同时,并没有向系统

学以致用,python多线程备份数据库并删除旧的备份。

1 #!/usr/bin/python 2 # -*- coding=utf-8 -*- 3 import time 4 import os 5 import datetime 6 import threading 7 from time import ctime,sleep 8 9 date=time.strftime('%Y-%m-%d',time.localtime(time.time())) 10 dbname=('test','test2') #定义元组必须要有多个,要不则循环里面的字