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

  • 1、如何理解python的多线程编程
  • 2、Python多线程
  • 3、python 多线程
  • 4、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-课程总结

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

self.p[:]=array

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

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

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

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提供了两个模块来实现多线程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 ,但通多程线的方式运行脚本,总的时间没变化。

原创文章,作者:OZ7FU,如若转载,请注明出处:https://www.506064.com/n/126959.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
OZ7FUOZ7FU
上一篇 2024-10-03 23:13
下一篇 2024-10-03 23:13

相关推荐

  • Python计算阳历日期对应周几

    本文介绍如何通过Python计算任意阳历日期对应周几。 一、获取日期 获取日期可以通过Python内置的模块datetime实现,示例代码如下: from datetime imp…

    编程 2025-04-29
  • Python中引入上一级目录中函数

    Python中经常需要调用其他文件夹中的模块或函数,其中一个常见的操作是引入上一级目录中的函数。在此,我们将从多个角度详细解释如何在Python中引入上一级目录的函数。 一、加入环…

    编程 2025-04-29
  • Python周杰伦代码用法介绍

    本文将从多个方面对Python周杰伦代码进行详细的阐述。 一、代码介绍 from urllib.request import urlopen from bs4 import Bea…

    编程 2025-04-29
  • Python列表中负数的个数

    Python列表是一个有序的集合,可以存储多个不同类型的元素。而负数是指小于0的整数。在Python列表中,我们想要找到负数的个数,可以通过以下几个方面进行实现。 一、使用循环遍历…

    编程 2025-04-29
  • 如何查看Anaconda中Python路径

    对Anaconda中Python路径即conda环境的查看进行详细的阐述。 一、使用命令行查看 1、在Windows系统中,可以使用命令提示符(cmd)或者Anaconda Pro…

    编程 2025-04-29
  • Python清华镜像下载

    Python清华镜像是一个高质量的Python开发资源镜像站,提供了Python及其相关的开发工具、框架和文档的下载服务。本文将从以下几个方面对Python清华镜像下载进行详细的阐…

    编程 2025-04-29
  • Python程序需要编译才能执行

    Python 被广泛应用于数据分析、人工智能、科学计算等领域,它的灵活性和简单易学的性质使得越来越多的人喜欢使用 Python 进行编程。然而,在 Python 中程序执行的方式不…

    编程 2025-04-29
  • python强行终止程序快捷键

    本文将从多个方面对python强行终止程序快捷键进行详细阐述,并提供相应代码示例。 一、Ctrl+C快捷键 Ctrl+C快捷键是在终端中经常用来强行终止运行的程序。当你在终端中运行…

    编程 2025-04-29
  • 蝴蝶优化算法Python版

    蝴蝶优化算法是一种基于仿生学的优化算法,模仿自然界中的蝴蝶进行搜索。它可以应用于多个领域的优化问题,包括数学优化、工程问题、机器学习等。本文将从多个方面对蝴蝶优化算法Python版…

    编程 2025-04-29
  • Python字典去重复工具

    使用Python语言编写字典去重复工具,可帮助用户快速去重复。 一、字典去重复工具的需求 在使用Python编写程序时,我们经常需要处理数据文件,其中包含了大量的重复数据。为了方便…

    编程 2025-04-29

发表回复

登录后才能评论