python 多线程 start_new_thread()

一、简述

  CPython实现细节: 由于GIL(Global Interpreter Lock),在CPython中一次只能有一个线程来执行python代码,不过有些面向执行的库可以克服这个限制。如果想要使你的应用程序更好的利用计算机资源的话,最好使用multiprocessing。 但是,如果同时运行多个I/O任务的话,线程依然是一个很好地选择。

  python线程的作用主要是应对I/O任务,例如网络数据的读写等。

二、示例

  1. 函数说明。

  start_new_thread ( function , args [ , kwargs ] )

  创建一个新的线程,返回一个线程标识符。function是线程函数,args是线程函数的参数,是一个list。kwargs可选参数,可不填。

#!/usr/bin/env python

# _*_ coding = utf-8 _*_

import thread
import time

def work_thread(id):

    cnt = 1

    print "Thread %d is runing..." % id

    while True:
        print "Thread with ID %d has counter value %d" % (id, cnt)
        time.sleep(2)
        cnt += 1

for i in range(1,5):
    thread.start_new_thread(work_thread,(i,))

print "Main thread doing an infinite wait loop..."

while True:
    pass

运行代码,输出结果如下:

$ ./thread_demo.py

Main thread doing an infinite wait loop…

Thread 3 is runing…

Thread 1 is runing…

Thread 2 is runing…

Thread 4 is runing…

Thread with ID 1 has counter value 1

Thread with ID 4 has counter value 1

Thread with ID 2 has counter value 1

Thread with ID 3 has counter value 1

Thread with ID 2 has counter value 2

Thread with ID 3 has counter value 2

Thread with ID 4 has counter value 2

Thread with ID 1 has counter value 2

Thread with ID 3 has counter value 3

Thread with ID 4 has counter value 3

Thread with ID 1 has counter value 3

Thread with ID 2 has counter value 3

Thread with ID 1 has counter value 4

Thread with ID 4 has counter value 4

Thread with ID 2 has counter value 4

Thread with ID 3 has counter value 4

线程退出函数:

thread.exit ()。结束当前线程。调用该函数会触发 SystemExit 异常,如果没有处理该异常,线程将结束。

时间: 2024-08-02 08:10:58

python 多线程 start_new_thread()的相关文章

python 多线程编程

一)线程基础 1.创建线程: thread模块提供了start_new_thread函数,用以创建线程.start_new_thread函数成功创建后还能够对其进行操作. 其函数原型: start_new_thread(function,atgs[,kwargs]) 其參数含义例如以下: function: 在线程中运行的函数名 args:元组形式的參数列表. kwargs: 可选參数,以字典的形式指定參数 方法一:通过使用thread模块中的函数创建新线程. >>> import th

python多线程-threading模块

threading 是我们常用的用于 python 多线程的模块,其功能更加丰富.下面我们就来开始学习这个模块. 同样的,我这里声明一样我使用的版本是 python2.7,不同版本直接可能存在差异. 老规矩,使用 help() 函数获取帮助文档,看看里面有什么内容. threading 模块中提供了一个 thread 的类,注意不要和 thread 模块搞混了,两者差别还是很大的.thread 这个类可以实例化一个对象,每个对象代表一个线程,可以调用其中的 run() 方法来开启一个线程的运行.

Python多线程下的_strptime问题

Python多线程下的_strptime问题 由于Python的datetime和time中的_strptime方法不支持多线程,运行时会报错: import datetimeimport threadimport time def f():    datetime.datetime.strptime("20100101","%Y%m%d") for _ in xrange(3):    thread.start_new_thread(f, ())time.slee

[Python]多线程入门

Python的多线程有两种实现方法: 函数,线程类 1.函数 调用thread模块中的start_new_thread()函数来创建线程,以线程函数的形式告诉线程该做什么 # -*- coding: utf-8 -*- import thread def f(name): #定义线程函数 print "this is " + name if __name__ == '__main__': thread.start_new_thread(f, ("thread1",)

【跟我一起学Python吧】Python 多线程

其实自我感觉Python的多线程很类似于Java的多线程机制,但是比JAVA的多线程更灵活.在早期的Python多线程实现中,采用了thread模块.例如: Python代码   from time import ctime,sleep from thread import start_new_thread def loop1(): print "enter loop1:",ctime(); sleep(3); print "leave loop1:",ctime(

python多线程(一)

原文:http://www.pythonclub.org/python-basic/threading 一.python多线程thread和threading实现 python是支持多线程的,并且是native的线程.主要是通过thread和threading这两个模块来实现的. python的thread模块是比较底层的模块,python的threading模块是对thread做了一些包装的,可以更加方便的被使用. 这里需要提一下的是python对线程的支持还不够完善,不能利用多CPU,但是下

《python源码剖析》笔记 python多线程机制

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 1.GIL与线程调度 Python中的线程是操作系统的原生线程,Python虚拟机使用一个全局解释器锁(Global Interpreter Lock)来互斥线程对Python虚拟机的使用 为了支持多线程机制,一个基本的要求就是需要实现不同线程对共享资源访问的互斥,所以引入了GIL. GIL:在一个线程拥有了解释器的访问权之后,其他的所有线程都必须等待它释放解释器的访问权,即使这些线程的下

Python 多线程 -thread threading Queue- 简单学习

在实际工作过程中,会出现需要并发的做一些事情,例如一台机器测到几千台机器的网络连通性,如果你单线程一台一台测的话,会花费很多的事情,不具有实时性,更不能在变化的时候立刻感知当时网络的状况,这时多线程就是一个很好地选择.python已经给我们封装好了多线程库thread和threading. thread:比较底层的模块 threading:Higher-level threading interface ps:建议使用threading模块 - 高级别的threading模块更为先进,对线程的支

Python多线程编程

原文 运行几个线程和同时运行几个不同的程序类似,它有以下好处: 一个进程内的多个线程和主线程分享相同的数据空间,比分开不同的过程更容易分享信息或者彼此通信. 线程有时叫做轻量化过程,而且他们不要求更多的内存开支:它们比过程便宜. 一个线程的顺序是:启动,执行和停止.有一个指令指针跟踪线程正在运行的上下文在哪里. 它可以被抢占(中断) 它能暂时被挂起(也叫做休眠),而别的线程在运行--这也叫做yielding(让步). 开始一个新线程: 要生成一个线程,需要调用在thread模块中方法如下: th