python之单线程、多线程操作

简介: 前言单线程和多线程是什么自行google补脑对于python 单线程和多线程的理解,我花了很长时间,搜索的大部份文章都不够通俗易懂。所以,这里力图用简单的例子,对单线程和多线程有个初步的认识。

前言

单线程和多线程是什么自行google补脑

对于python 单线程和多线程的理解,我花了很长时间,搜索的大部份文章都不够通俗易懂。所以,这里力图用简单的例子,对单线程和多线程有个初步的认识。

一、单线程

单线程, 在好些年前的MS-DOS时代,操作系统处理问题都是单任务的,我想做微信聊天和看电影两件事儿,那么一定要先排一下顺序。

Demo-1

#coding:utf-8

import threading

from timeimport ctime,sleep

def weixin(func):

for iin range(2):

print(u'我在用微信同 %s 进行反馈、总结问题.%s' %(func,ctime()))

sleep(2)

def movie(func):

for iin range(2):

print(u'我在看电影 %s! %s ' %(func,ctime()))

sleep(5)

if __name__ =='__main__':

weixin(u'软件测试工程师')

movie(u'红海行动')

print('all over %s' %ctime())

运行结果:

img_545b1b36eed2a86e7677d583baa919ea.png
运行结果

二、多线程

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

threading.Thread里面几个参数介绍

class Thread(_Verbose)

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

      *group*:group参数必须为空,参数group是预留的,用于将来扩展;

  参数args和kwargs分别表示调用target时的参数列表和关键字参数。

      *target*: 参数target是一个可调用对象(也称为活动[activity]),在线程启动后执行

      *name*: 参数name是线程的名字。默认值为“Thread-N“,N是一个数字。

      *args*:传递给线程函数target的参数,他必须是个tuple类型.

      *kwargs*:kwargs表示关键字参数。字典类型 {}.

Demo-2:

#coding:utf-8

import threading

from timeimport ctime,sleep

def weixin(func):

for iin range(2):

print(u'我在用微信同%s 进行反馈、总结问题.%s' %(func,ctime()))

sleep(2)

def movie(func):

for iin range(2):

print(u'我在看电影<%s>!%s ' %(func,ctime()))

sleep(2)

threads = []

t1 = threading.Thread(target=weixin(func=u'软件测试工程师'))

threads.append(t1)

t2 = threading.Thread(target=movie(func=u'红海行动'))

threads.append(t2)

if __name__ =='__main__':

#weixin(u'软件测试工程师')

#movie(u'红海行动')

# print('all over %s' %ctime())

    for tin threads:

t.start()

print('all over %s' %ctime())

运行结果:

img_0609b93164b251aa19f3ae901ab90100.png
运行结果

Demo-3:

import threading

from timeimport ctime,sleep

def weixin(func):

for iin range(2):

print(u'我在用微信同%s 进行反馈、总结问题.%s' %(func,ctime()))

sleep(2)

def movie(func):

for iin range(2):

print(u'我在看电影<%s>!%s ' %(func,ctime()))

sleep(2)

threads = []

#t1 = threading.Thread(target=weixin(func=u'软件测试工程师'))

t1 = threading.Thread(target=weixin,args=("软件测试工程师",))

threads.append(t1)

#t2 = threading.Thread(target=movie(func=u'红海行动'))

t2 = threading.Thread(target=movie,kwargs={"func":"红海行动"})

threads.append(t2)

if __name__ =='__main__':

#weixin(u'软件测试工程师')

#movie(u'红海行动')

# print('all over %s' %ctime())

    for tin threads:

t.start()

print('all over %s' %ctime())

运行结果:

img_a58786e791267aaad9f5eb820b8e6ca6.png
运行结果
目录
相关文章
|
13天前
|
安全 Java 数据处理
Python网络编程基础(Socket编程)多线程/多进程服务器编程
【4月更文挑战第11天】在网络编程中,随着客户端数量的增加,服务器的处理能力成为了一个重要的考量因素。为了处理多个客户端的并发请求,我们通常需要采用多线程或多进程的方式。在本章中,我们将探讨多线程/多进程服务器编程的概念,并通过一个多线程服务器的示例来演示其实现。
|
14天前
|
存储 Java 数据库连接
java多线程之线程通信
java多线程之线程通信
|
23天前
|
算法 数据处理 Python
Python并发编程:解密异步IO与多线程
本文将深入探讨Python中的并发编程技术,重点介绍异步IO和多线程两种常见的并发模型。通过对比它们的特点、适用场景和实现方式,帮助读者更好地理解并发编程的核心概念,并掌握在不同场景下选择合适的并发模型的方法。
|
16天前
|
人工智能 机器人 C++
【C++/Python】Windows用Swig实现C++调用Python(史上最简单详细,80岁看了都会操作)
【C++/Python】Windows用Swig实现C++调用Python(史上最简单详细,80岁看了都会操作)
|
5天前
|
索引 Python
如何使用Python的Pandas库进行数据透视表(pivot table)操作?
使用Pandas在Python中创建数据透视表的步骤包括:安装Pandas库,导入它,创建或读取数据(如DataFrame),使用`pd.pivot_table()`指定数据框、行索引、列索引和值,计算聚合函数(如平均分),并可打印或保存结果到文件。这允许对数据进行高效汇总和分析。
10 2
|
6天前
|
调度 Python
Python多线程、多进程与协程面试题解析
【4月更文挑战第14天】Python并发编程涉及多线程、多进程和协程。面试中,对这些概念的理解和应用是评估候选人的重要标准。本文介绍了它们的基础知识、常见问题和应对策略。多线程在同一进程中并发执行,多进程通过进程间通信实现并发,协程则使用`asyncio`进行轻量级线程控制。面试常遇到的问题包括并发并行混淆、GIL影响多线程性能、进程间通信不当和协程异步IO理解不清。要掌握并发模型,需明确其适用场景,理解GIL、进程间通信和协程调度机制。
26 0
|
12天前
|
数据采集 JSON 网络协议
「Python系列」Python urllib库(操作网页URL对网页的内容进行抓取处理)
`urllib` 是 Python 的一个标准库,用于打开和读取 URLs。它提供了一组模块,允许你以编程方式从网络获取数据,如网页内容、文件等。
34 0
|
22天前
|
安全 Java 容器
Java并发编程:实现高效、线程安全的多线程应用
综上所述,Java并发编程需要注意线程安全、可见性、性能等方面的问题。合理使用线程池、同步机制、并发容器等工具,可以实现高效且线程安全的多线程应用。
14 1
|
22天前
|
数据采集 Java API
python并发编程: Python使用线程池在Web服务中实现加速
python并发编程: Python使用线程池在Web服务中实现加速
18 3
python并发编程: Python使用线程池在Web服务中实现加速
|
22天前
|
JavaScript 前端开发
JS 单线程还是多线程,如何显示异步操作
JS 单线程还是多线程,如何显示异步操作
22 2