您的位置:

python多线程学习记录(python多线程操作数据库)

本文目录一览:

如何理解python的多线程编程

线程是程序员必须掌握的知识,多线程对于代码的并发执行、提升代码效率和运行都至关重要。今天就分享一个黑马程序员Python多线程编程的教程,从0开始学习python多任务编程,想了解python高并发实现,从基础到实践,通过知识点 + 案例教学法帮助你想你想迅速掌握python多任务。

课程内容:

1.掌握多任务实现的并行和并发

2.掌握多进程实现多任务

3.掌握多线程实现多任务

4.掌握合理搭配多进程和线程

适用人群:

1、对python多任务编程感兴趣的在校生及应届毕业生。

2、对目前职业有进一步提升要求,希望从事python人工智能行业高薪工作的在职人员。

3、对python人工智能行业感兴趣的相关人员。

基础课程主讲内容包括:

1.python多任务编程

基础班课程大纲:

00-课程介绍

01-多任务介绍

02-进程介绍

03-使用多进程来完成多任务

04-多进程执行带有参数的任务

05-获取进程的编号

06-进程注意点

07-案例-多进程实现传智视频文件夹多任务拷贝器

08-线程介绍

09-使用多线程执行多任务

10-线程执行带有参数的任务

11-主线程和子线程的结束顺序

12-线程之间的执行顺序是无序

13-线程和进程的对比

14-案例-多线程实现传智视频文件夹多任务拷贝器

15-课程总结

Python多线程

那是当然。你这样写就可以了

self.p[:]=array

这样写法的含义就是指针不变。只换内容。这样就可以同步了。

你的写法是,新建一个数组,再把指针缎带self.p,如果其它的线程就会出问题。

另外你的p应该放在__init__之前。引用时使用T.p来引用,这样更合理一些。

python 多线程

python支持多线程效果还不错,很多方面都用到了python 多线程的知识,我前段时间用python 多线程写了个处理生产者和消费者的问题,把代码贴出来给你看下:

#encoding=utf-8

import threading

import random

import time

from Queue import Queue

class Producer(threading.Thread):

def __init__(self, threadname, queue):

threading.Thread.__init__(self, name = threadname)

self.sharedata = queue

def run(self):

for i in range(20):

print self.getName(),'adding',i,'to queue'

self.sharedata.put(i)

time.sleep(random.randrange(10)/10.0)

print self.getName(),'Finished'

# Consumer thread

class Consumer(threading.Thread):

def __init__(self, threadname, queue):

threading.Thread.__init__(self, name = threadname)

self.sharedata = queue

def run(self):

for i in range(20):

print self.getName(),'got a value:',self.sharedata.get()

time.sleep(random.randrange(10)/10.0)

print self.getName(),'Finished'

# Main thread

def main():

queue = Queue()

producer = Producer('Producer', queue)

consumer = Consumer('Consumer', queue)

print 'Starting threads ...'

producer.start()

consumer.start()

producer.join()

consumer.join()

print 'All threads have terminated.'

if __name__ == '__main__':

main()

如果你想要了解更多的python 多线程知识可以点下面的参考资料的地址,希望对有帮助!

Python多线程的一些问题

python提供了两个模块来实现多线程thread 和threading ,thread 有一些缺点,在threading 得到了弥补,为了不浪费你和时间,所以我们直接学习threading 就可以了。

继续对上面的例子进行改造,引入threadring来同时播放音乐和视频:

#coding=utf-8import threadingfrom time import ctime,sleepdef music(func): for i in range(2): print "I was listening to %s. %s" %(func,ctime())

sleep(1)def move(func): for i in range(2): print "I was at the %s! %s" %(func,ctime())

sleep(5)

threads = []

t1 = threading.Thread(target=music,args=(u'爱情买卖',))

threads.append(t1)

t2 = threading.Thread(target=move,args=(u'阿凡达',))

threads.append(t2)if __name__ == '__main__': for t in threads:

t.setDaemon(True)

t.start() print "all over %s" %ctime()

import threading

首先导入threading 模块,这是使用多线程的前提。

threads = []

t1 = threading.Thread(target=music,args=(u'爱情买卖',))

threads.append(t1)

创建了threads数组,创建线程t1,使用threading.Thread()方法,在这个方法中调用music方法target=music,args方法对music进行传参。 把创建好的线程t1装到threads数组中。

接着以同样的方式创建线程t2,并把t2也装到threads数组。

for t in threads:

t.setDaemon(True)

t.start()

最后通过for循环遍历数组。(数组被装载了t1和t2两个线程)

setDaemon()

setDaemon(True)将线程声明为守护线程,必须在start() 方法调用之前设置,如果不设置为守护线程程序会被无限挂起。子线程启动后,父线程也继续执行下去,当父线程执行完最后一条语句print "all over %s" %ctime()后,没有等待子线程,直接就退出了,同时子线程也一同结束。

start()

开始线程活动。

运行结果:

========================= RESTART ================================

I was listening to 爱情买卖. Thu Apr 17 12:51:45 2014 I was at the 阿凡达! Thu Apr 17 12:51:45 2014 all over Thu Apr 17 12:51:45 2014

从执行结果来看,子线程(muisc 、move )和主线程(print "all over %s" %ctime())都是同一时间启动,但由于主线程执行完结束,所以导致子线程也终止。

继续调整程序:

...if __name__ == '__main__': for t in threads:

t.setDaemon(True)

t.start()

t.join() print "all over %s" %ctime()

我们只对上面的程序加了个join()方法,用于等待线程终止。join()的作用是,在子线程完成运行之前,这个子线程的父线程将一直被阻塞。

注意: join()方法的位置是在for循环外的,也就是说必须等待for循环里的两个进程都结束后,才去执行主进程。

运行结果:

========================= RESTART ================================

I was listening to 爱情买卖. Thu Apr 17 13:04:11 2014 I was at the 阿凡达! Thu Apr 17 13:04:11 2014I was listening to 爱情买卖. Thu Apr 17 13:04:12 2014I was at the 阿凡达! Thu Apr 17 13:04:16 2014all over Thu Apr 17 13:04:21 2014

从执行结果可看到,music 和move 是同时启动的。

开始时间4分11秒,直到调用主进程为4分22秒,总耗时为10秒。从单线程时减少了2秒,我们可以把music的sleep()的时间调整为4秒。

...def music(func): for i in range(2): print "I was listening to %s. %s" %(func,ctime())

sleep(4)

...

子线程启动11分27秒,主线程运行11分37秒。

虽然music每首歌曲从1秒延长到了4 ,但通多程线的方式运行脚本,总的时间没变化。