Python提供了_thread和threading两个模块来支持多线程,但_thread提供低级别的、原始的县城支持,以及一个简单的锁,通常情况下我们使用后者,来进行多线程编程

创建多线程

使用threading模块创建线程有两种方式,一种是调用Thread类的构造器来创建,另一种是继承Thread类创建线程类

使用Thread类的构造器创建线程

Thread类有如下构造器,直接调用它即可创建线程

__init__(self, group=None, target=None, name=None, args=(), kwargs=None, *, daemon=None)

group:指定该线程所属的线程组

target:指定该线程要调度的目标方法

args:指定一个元组,以位置参数的形式为target指定的函数传入参数

kwargs:指定一个字典,以关键字参数的形式为target指定的函数传入参数

daemon:指定所构建的线程是否是后台线程

使用构造器创建线程步骤

调用Thread类的构造器创建线程对象,其中target参数指定的函数作为线程执行体

调用线程对象的start()方法启动该线程

import threading

# 定义一个普通的action函数,该函数准备作为线程执行体

def action(max):for i inrange(max):

# 调用threading模块current_thread()函数获取当前线程

# 线程对象的getName()方法获取当前线程的名字

print(threading.current_thread().getName()+ " " +str(i))

# 下面是主程序(也就是主线程的执行体)for i in range(100):

# 调用threading模块current_thread()函数获取当前线程

print(threading.current_thread().getName()+ " " +str(i))if i == 20:

# 创建并启动第一个线程

t1=threading.Thread(target=action,args=(100,))

t1.start()

# 创建并启动第二个线程

t2=threading.Thread(target=action,args=(100,))

t2.start()

print('主线程执行完成!')

args=(100,)可以看到这个参数,他是个元组形式的参数,按位置逐一传给函数执行体,在这个例子中就是action(MAX)函数

继承Thread类创建线程类

通过继承Thread类来创建线程步骤

定义Thread类的子类,并重写该类的run()函数,run()函数是线程执行体

创建Thread子类的实例,也就是创建线程对象

调用线程对象的start()方法来启动线程

————————————————

import threading

# 通过继承threading.Thread类来创建线程类classFkThread(threading.Thread):

def __init__(self):

threading.Thread.__init__(self)

self.i= 0# 重写run()方法作为线程执行体

def run(self):while self.i < 100:

# 调用threading模块current_thread()函数获取当前线程

# 线程对象的getName()方法获取当前线程的名字

print(threading.current_thread().getName()+ " " +str(self.i))

self.i+= 1# 下面是主程序(也就是主线程的执行体)for i in range(100):

# 调用threading模块current_thread()函数获取当前线程

print(threading.current_thread().getName()+ " " +str(i))if i == 20:

# 创建并启动第一个线程

ft1=FkThread()

ft1.start()

# 创建并启动第二个线程

ft2=FkThread()

ft2.start()

print('主线程执行完成!')

多线程调用接口

# -*- coding: utf-8 -*-import threading

import requestsfromtime import ctime

import json

def syc_owen():"""syc_owen"""print("Start synchronizing %s %s" % ("owen", ctime()))

parameter= {"userId":"1263","userName":"13810078954","enterpriseId":"10330","flag":"sended"}

request_own= requests.put("https://xxxxxx.leadscloud.com/mail/receiveSendedAndRubbishMail", data=parameter)

data=request_own.json()

print(json.dumps(data, indent=4, sort_keys=True, ensure_ascii=False) )

print("接口调用已经返回结果,本次同步结束")

def syc_grace():"""syc_grace"""print("Start synchronizing %s %s" % ("grace", ctime()))

parameter= {"userId":"1294","userName":"13810327625","enterpriseId":"10330","flag":"sended"}

request_own= requests.put("https://xxxxxx.leadscloud.com/mail/receiveSendedAndRubbishMail", data=parameter)

data=request_own.json()

print(json.dumps(data, indent=4, sort_keys=True, ensure_ascii=False) )

print("接口调用已经返回结果,本次同步结束")

syc_email_threads=[] # 定义线程列表,然后逐一将线程放进列表最后加载线程列表执行

owen_thread= threading.Thread(target=syc_owen)

syc_email_threads.append(owen_thread)

grace_thread= threading.Thread(target=syc_grace)

syc_email_threads.append(grace_thread)if __name__ == '__main__':for threademail insyc_email_threads:

threademail.start() # 启动线程活动for threademail insyc_email_threads:

threademail.join() # 等待线程终止

多线程启动浏览器实例

单线程代码

# -*- coding: utf-8 -*-

"""Created on Wed Apr 24 11:45:55 2019@author: davieyang"""fromselenium import webdriver # 引入webdriverfromtime import sleep # 从time模块引入sleepfromtime import ctime # 从time模块引入ctime

def start_chrome(): # 定义启动谷歌浏览器的方法

print("starting chrome browser now! %s" %ctime()) # 控制台打印当前时间

chrome_driver=webdriver.Chrome()

chrome_driver.get("http://www.baidu.com") #打开百度主页

sleep(2)

chrome_driver.quit()

def start_firefox(): # 定义启动火狐浏览器的方法

print("starting firefox browser now! %s" %ctime()) # 控制台打印当前时间

fire_driver=webdriver.Firefox()

fire_driver.get("http://www.baidu.com") #打开百度主页

sleep(3)

fire_driver.quit()

def start_ie(): # 定义启动IE浏览器的方法

print("starting ie browser now! %s" %ctime()) # 控制台打印当前时间

ie_driver=webdriver.Ie()

ie_driver.get("http://www.baidu.com") #打开百度主页

sleep(5)

ie_driver.quit()if __name__ == '__main__':

start_chrome()

start_firefox()

start_ie()

print(u"全部结束 %s" %ctime())

多线程代码

# -*- coding: utf-8 -*-

"""Created on Wed Apr 24 19:23:25 2019@author: davieyang"""

fromselenium import webdriverfromtime import sleepfromtime import ctime

import threading

def start_chrome(): # 定义启动谷歌浏览器的方法

print("starting chrome browser now! %s" %ctime())

chrome_driver=webdriver.Chrome()

chrome_driver.get("http://www.baidu.com")

sleep(2)

chrome_driver.quit()

def start_firefox(): # 定义启动火狐浏览器的方法

print("starting firefox browser now! %s" %ctime())

fire_driver=webdriver.Firefox()

fire_driver.get("http://www.baidu.com")

sleep(3)

fire_driver.quit()

def start_ie(): # 定义启动IE浏览器的方法

print("starting ie browser now! %s" %ctime())

ie_driver=webdriver.Ie()

ie_driver.get("http://www.baidu.com")

sleep(5)

ie_driver.quit()

threading_list=[] #创建一个空列表用于存储线程

# 定义一个执行start_chrome()方法的线程

chrome_thread= threading.Thread(target=start_chrome)

threading_list.append(chrome_thread) # 将线程放到列表中

# 定义一个执行start_firefox()方法的线程

firefox_thread= threading.Thread(target=start_firefox)

threading_list.append(firefox_thread) # 将线程放到列表中'''# 定义一个执行start_chrome()方法的线程

ie_thread= threading.Thread(target=start_ie)

threading_list.append(ie_thread) # 将线程放到列表中'''

if __name__ == '__main__':for start_thread inthreading_list:

start_thread.start()for start_thread inthreading_list:

start_thread.join()

print(u"全部结束 %s" % ctime())

————————————————

版权声明:本文为CSDN博主「Davieyang.D.Y」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/dawei_yang000000/article/details/105609689

python如何开启多线程_Python如何创建多线程相关推荐

  1. 多线程Thread类创建多线程

    package com.ajax; //多线程Thread类创建多线程 public class Example02 {public static void main(String[] args){n ...

  2. 多线程Runnable类创建多线程

    package com.ajax; //多线程Runnable类创建多线程 public class Example01 {public static void main(String [] args ...

  3. python多程优化_Python 基本功: 13. 多线程运算提速

    小编在前两天开通了一个 Python 金融的专栏,顺便用 TuShare 下载了几只 A股的数据,有兴趣的小伙伴可以去看一下: 多多教Python:Python 金融: TuShare API 获取股 ...

  4. python服务器qt客户端_python3+PyQt5 创建多线程网络应用-TCP客户端和TCP服务器实例...

    本文在上文的基础上重新实现支持多线程的服务器. 以下为TCP客户端的程序代码: #!/usr/bin/env python3 import sys from PyQt5.QtCore import ( ...

  5. python爬虫程序下载_Python爬虫之多线程下载程序类电子书

    近段时间,笔者发现一个神奇的网站:http://www.allitebooks.com/ ,该网站提供了大量免费的编程方面的电子书,是技术爱好者们的福音.其页面如下: ![](https://imag ...

  6. python如何开启多进程_python如何写多进程

    Python中的多进程是通过multiprocessing包来实现的,和多线程的threading.Thread差不多,它可以利用multiprocessing.Process对 象来创建一个进程对象 ...

  7. C++多线程实例(_beginThreadex创建多线程)

    C++多线程(二)(_beginThreadex创建多线程) C/C++ Runtime 多线程函数 一 简单实例(来自codeprojct:http://www.codeproject.com/us ...

  8. Java面试之多线程:Java创建多线程为什么只有一种方式?

    关于线程的创建,其实我一直都有话说,于是今天,我来开个头.今天依旧一样,长话短说,只谈创建多线程.你好,我是fntp!今天要跟大家分享的是博主最近面试Java实习所遇到的一些问题!那就是经常性被问到的 ...

  9. python 协程 多线程_python进阶之多线程(简单介绍协程)

    多线程 线程:实现多任务的另一种方式 一个进程中,也经常需要同时做多件事,就需要同时运行多个'子任务',这些子任务,就是线程 线程又被称为轻量级进程(lightweight process),是更小的 ...

最新文章

  1. 4.方向-世界坐标系
  2. 在VS中建立一个易于管理的C++工程
  3. android 自定义安全键盘,android 实现自定义安全键盘 且每次数字随机变换位置
  4. RabbitMQ 四种Exchange
  5. MySQL5.7.9安装与配置优化
  6. 数据库MySQL驱动5.1.22下载_mysql-connector-java-5.1.22下载
  7. Mybatis中的collection和association一关系
  8. Ubuntu安装jdk10
  9. WIN7新功能:跳转列表
  10. 人脸对齐(六)--ERT算法
  11. VS生产dll把双目追踪四个圆点计算的物体位姿给unity,在unity中实时变化
  12. 上海车展自动驾驶产业链盘点
  13. 超详细的Python实现新浪微博模拟登陆(小白都能懂)
  14. 使用邻接矩阵实现商品SKU表单联动
  15. 【解决方法】浏览器网页界面显示未连接到互联网
  16. 欧拉定理,费马小定理证明
  17. 春节特辑・戏说天津卫
  18. 币圈指数哪家强?且看分析OK VS 火币
  19. 淘宝商城商品分类特效代码
  20. (DataWhale)图神经网络Task01:基于PyG包的图数据的表示与使用

热门文章

  1. 腾讯招.NET5,居然要求精通MySQL,而不是SQLServer!
  2. 一个小技巧助您减少if语句的状态判断
  3. 程序开发天团必备单品,稳定输出还加持千元商务礼限时送!
  4. 推荐:适合小白入门的Asp.Net Core 开源学习手册
  5. LINQ :最终统治了​所有的语言!
  6. BeetleX实现HTTP协议详解
  7. asp.net core 自定义 Policy 替换 AllowAnonymous 的行为
  8. 对产品质量的一点思考
  9. ASP.NET Core 2.0使用Autofac实现IOC依赖注入竟然能如此的优雅简便
  10. 基于 websocket 实现的 im 实时通讯案例