PYTHON3 多线程 技术教程文章

为什么有人说Python的多线程是鸡肋呢?

回复内容: GIL blablabla concurrent blablabla简单地说就是作为可能是仅有的支持多线程的解释型语言(perl的多线程是残疾,PHP没有多线程),Python的多线程是有compromise的,在任意时间只有一个Python解释器在解释Python bytecode。UPDATE:如评论指出,Ruby也是有thread支持的,而且至少Ruby MRI是有GIL的。如果你的代码是CPU密集型,多个线程的代码很有可能是线性执行的。所以这种情况下多线程是鸡肋,效率可能还不如单线程因...

Python多线程实例教程

本文以实例形式较为详细的讲解了Python的多线程,是Python程序设计中非常重要的知识点。分享给大家供大家参考之用。具体方法如下: 用过Python的人都会觉得Python的多线程很类似于Java的多线程机制,但是比JAVA的多线程更灵活。在早期的Python多线程实现中,采用了thread模块。例如: from time import ctime,sleep from thread import start_new_thread def loop1(): print "enter loop1:",ctime(); sleep(3); print "leave loo...

python多线程抓取*子内容示例

使用re, urllib, threading 多线程抓取天涯帖子内容,设置url为需抓取的天涯帖子的第一页,设置file_name为下载后的文件名代码如下:#coding:utf-8 import urllibimport reimport threadingimport os, time class Down_Tianya(threading.Thread): """多线程下载""" def __init__(self, url, num, dt): threading.Thread.__init__(self) self.url = url self.num = num self.txt_dict = dtdef ru...

理解python多线程(python多线程简明教程)

对于python 多线程的理解,我花了很长时间,搜索的大部份文章都不够通俗易懂。所以,这里力图用简单的例子,让你对多线程有个初步的认识。 单线程在好些年前的MS-DOS时代,操作系统处理问题都是单任务的,我想做听音乐和看电影两件事儿,那么一定要先排一下顺序。 (好吧!我们不纠结在DOS时代是否有听音乐和看影的应用。^_^) 代码如下:from time import ctime,sleep def music(): for i in range(2): print "I was lis...

python使用urllib模块开发的多线程豆瓣小站mp3下载器

代码如下:#! /usr/bin/python2.7# -- coding:utf-8 -- import os, urllib,urllib2, thread,threadingimport re #匹配音乐urlreg=re.compile({"name":"(.+?)".+?"rawUrl":"(.+?)",.+?}, re.I) class downloader(threading.Thread): def __init__(self, url, name): threading.Thread.__init__(self) self.url=url self.name=namedef run(self): print download...

haskell实现多线程服务器实例代码

代码如下:module Main where import Network.Socketimport Control.Concurrent main :: IO ()main = do sock <- socket AF_INET Stream 0 bindSocket sock (SockAddrInet 4242 iNADDR_ANY) listen sock 10240 mainLoop sock mainLoop :: Socket -> IO ()mainLoop sock = do conn <- accept sock forkIO $ runConn conn mainLoop sock runConn :: (Socket, SockAddr) -> IO ()runConn (sock, tcp) = do sms...

python多线程编程方式分析示例详解

在Python多线程中如何创建一个线程对象如果你要创建一个线程对象,很简单,只要你的类继承threading.Thread,然后在__init__里首先调用threading.Thread的__init__方法即可代码如下:import threading class mythread(threading.Thread): def __init__(self, threadname): threading.Thread.__init__(self, name = threadname) 这才仅仅是个空线程,我可不是要他拉空车的,他可得给我干点实在活。很简单,重写类的run()方法即可...

分析Python编程时利用wxPython来支持多线程的方法

如果你经常使用python开发GUI程序的话,那么就知道,有时你需要很长时间来执行一个任务。当然,如果你使用命令行程序来做的话,你回非常惊讶。大部分情况下,这会堵塞GUI的事件循环,用户会看到程序卡死。如何才能避免这种情况呢?当然是利用线程或进程了!本文,我们将探索如何使用wxPython和theading模块来实现。 wxpython线程安全方法 wxPython中,有三个“线程安全”的函数。如果你在更新UI界面时,三个函数都不使用,那么你可...

pythonthreading模块操作多线程介绍

python是支持多线程的,并且是native的线程。主要是通过thread和threading这两个模块来实现的。thread是比较底层的模块,threading是对thread做了一些包装的,可以更加方便的被使用。这里需要提一下的是python对线程的支持还不够完善,不能利用多CPU,但是下个版本的python中已经考虑改进这点,让我们拭目以待吧。threading模块里面主要是对一些线程的操作对象化了,创建了叫Thread的class。一般来说,使用线程有两种模式,一种是创...

Python多线程编程(五):死锁的形成

前一篇文章Python:使用threading模块实现多线程编程四[使用Lock互斥锁]我们已经开始涉及到如何使用互斥锁来保护我们的公共资源了,现在考虑下面的情况– 如果有多个公共资源,在线程间共享多个资源的时候,如果两个线程分别占有一部分资源并且同时等待对方的资源,这会引起什么问题? 死锁概念 所谓死锁: 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时...

Python多线程编程(三):threading.Thread类的重要函数和方法

这篇文章主要介绍threading模块中的主类Thread的一些主要方法,实例代码如下:代码如下: Created on 2012-9-7 @author: walfred @module: thread.ThreadTest3 @description: import threading class MyThread(threading.Thread): def __init__(self): threading.Thread.__init__(self) def run(self): print "I am %s" % (self.name) if __name__ == "__main__": for i in range(0, 5): my_thread = MyTh...

Python多线程编程(六):可重入锁RLock

考虑这种情况:如果一个线程遇到锁嵌套的情况该怎么办,这个嵌套是指当我一个线程在获取临界资源时,又需要再次获取。 根据这种情况,代码如下:代码如下: Created on 2012-9-8 @author: walfred @module: thread.ThreadTest6 import threading import time counter = 0 mutex = threading.Lock() class MyThread(threading.Thread): def __init__(self): threading.Thread.__init__(self) def run(self): glo...

Python多线程编程(一):threading模块综述

Python这门解释性语言也有专门的线程模型,Python虚拟机使用GIL(Global Interpreter Lock,全局解释器锁)来互斥线程对共享资源的访问,但暂时无法利用多处理器的优势。在Python中我们主要是通过thread和 threading这两个模块来实现的,其中Python的threading模块是对thread做了一些包装的,可以更加方便的被使用,所以我们使用 threading模块实现多线程编程。这篇文章我们主要来看看Python对多线程编程的支持。 在语言层面,Pyth...

python多线程用法实例详解

本文实例分析了python多线程用法。分享给大家供大家参考。具体如下: 今天在学习尝试学习python多线程的时候,突然发现自己一直对super的用法不是很清楚,所以先总结一些遇到的问题。当我尝试编写下面的代码的时候:代码如下:class A():def __init__( self ):print "A" class B( A ):def __init__( self ):super( B, self ).__init__( ) # A.__init__( self )print "B" b = B() 出现:代码如下:class A( object ):def __init__( s...

python基于queue和threading实现多线程下载实例

本文实例讲述了python基于queue和threading实现多线程下载的方法,分享给大家供大家参考。具体方法如下: 主代码如下:#download worker queue_download = Queue.Queue(0) DOWNLOAD_WORKERS = 20 for i in range(DOWNLOAD_WORKERS): DownloadWorker(queue_download).start() #start a download worker for md5 in MD5S: queue_download.put(md5) for i in range(DOWNLOAD_WORKERS): queue_download.put(None) 其中downloadworkers....

探寻python多线程ctrl+c退出问题解决方案

场景: 经常会遇到下述问题:很多io busy的应用采取多线程的方式来解决,但这时候会发现python命令行不响应ctrl-c 了,而对应的java代码则没有问题:代码如下: public class Test { public static void main(String[] args) throws Exception { new Thread(new Runnable() { public void run() { long start = System.currentTimeMillis(); while (true) { try { Thread.sleep(1000); } catch (Exception e) { } System....

Python多线程和队列操作实例

Python3,开一个线程,间隔1秒把一个递增的数字写入队列,再开一个线程,从队列中取出数字并打印到终端代码如下: #! /usr/bin/env python3 import time import threading import queue # 一个线程,间隔一定的时间,把一个递增的数字写入队列 # 生产者 class Producer(threading.Thread):def __init__(self, work_queue):super().__init__() # 必须调用self.work_queue = work_queuedef run(self):num = 1while True:self.work_que...

用Python实现一个简单的多线程TCP服务器的教程【图】

最近看《python核心编程》,书中实现了一个简单的1对1的TCPserver,但是在实际使用中1对1的形势明显是不行的,所以研究了一下如何在server端通过启动不同的线程(进程)来实现每个链接一个线程。 其实python在类的设计上已经考虑到了这一方面的需求,我们只要在自己的server上继承一下SocketServer.BaseRequestHandler就可以了。 server端代码如下:#!/usr/bin/env python import SocketServer from time import ctime HOST = ...

浅析Python多线程下的变量问题

在多线程环境下,每个线程都有自己的数据。一个线程使用自己的局部变量比使用全局变量好,因为局部变量只有线程自己能看见,不会影响其他线程,而全局变量的修改必须加锁。 但是局部变量也有问题,就是在函数调用的时候,传递起来很麻烦:def process_student(name):std = Student(name)# std是局部变量,但是每个函数都要用它,因此必须传进去:do_task_1(std)do_task_2(std)def do_task_1(std):do_subtask_1(std)do_subtask_2(st...

Python实现多线程抓取妹子图

心血来潮写了个多线程抓妹子图,虽然代码还是有一些瑕疵,但是还是记录下来,分享给大家。 Pic_downloader.py# -*- coding: utf-8 -*- """ Created on Fri Aug 07 17:30:58 2015@author: Dreace """ import urllib2 import sys import time import os import random from multiprocessing.dummy import Pool as ThreadPool type_ = sys.getfilesystemencoding() def rename():return time.strftime("%Y%m%d%H%M%S") def rename_2(...