首页 > 系统相关 >【Python】多进程 多线程

【Python】多进程 多线程

时间:2023-05-16 15:45:10浏览次数:40  
标签:__ name format Python self print time 进程 多线程

1. 进程 Process

1.1 多进程
# -*- coding: UTF-8 -*-
"""
# 计算8的20次方
"""
import time
import os

from multiprocessing import Process
import os
import time

def long_time_task(i):
    print('子进程: {} - 任务{}'.format(os.getpid(), i))
    time.sleep(2)
    print("结果: {}".format(8 ** 20))

if __name__=='__main__':
    print('当前母进程: {}'.format(os.getpid()))
    start = time.time()
    p1 = Process(target=long_time_task, args=(1,))
    p2 = Process(target=long_time_task, args=(2,))
    print('等待所有子进程完成。')
    p1.start()
    p2.start()
    p1.join()  # 主进程阻塞等待子进程的退出
    p2.join()
    end = time.time()
    print("总共用时{}秒".format((end - start)))

1.2 进程池 Poll
# -*- coding: UTF-8 -*-
"""
# 计算8的20次方
"""
from multiprocessing import Pool, cpu_count
import os
import time

def long_time_task(i):
    print('子进程: {} - 任务{}'.format(os.getpid(), i))
    time.sleep(2)
    print("结果: {}".format(8 ** 20))

if __name__=='__main__':
    print("CPU内核数:{}".format(cpu_count()))
    print('当前母进程: {}'.format(os.getpid()))
    start = time.time()
    p = Pool(8)
    for i in range(9):
        p.apply_async(long_time_task, args=(i,))
    print('等待所有子进程完成。')
    p.close()
    p.join()
    end = time.time()
    print("总共用时{}秒".format((end - start)))

2 线程 Thread

2.1 多线程
# -*- coding: UTF-8 -*-
"""
# 计算8的20次方
"""
import threading
import time


def long_time_task(i):
    print('当前子线程: {} 任务{}'.format(threading.current_thread().name, i))
    time.sleep(2)
    print("结果: {}".format(8 ** 20))


if __name__=='__main__':
    start = time.time()
    print('这是主线程:{}'.format(threading.current_thread().name))
    thread_list = []
    for i in range(1, 3):
        t = threading.Thread(target=long_time_task, args=(i, ))
        thread_list.append(t)

    for t in thread_list:
        t.start()

    for t in thread_list:
        t.join()

    end = time.time()
    print("总共用时{}秒".format((end - start)))
2.2 继承Thread类重写run方法创建新进程
#-*- encoding:utf-8 -*-
import threading
import time


def long_time_task(i):
    time.sleep(2)
    return 8**20

class MyThread(threading.Thread):
    def __init__(self, func, args , name='', ):
        threading.Thread.__init__(self)
        self.func = func
        self.args = args
        self.name = name
        self.result = None

    def run(self):
        print('开始子进程{}'.format(self.name))
        self.result = self.func(self.args[0],)
        print("结果: {}".format(self.result))
        print('结束子进程{}'.format(self.name))

if __name__=='__main__':
    start = time.time()
    threads = []
    for i in range(1, 3):
        t = MyThread(long_time_task, (i,), str(i))
        threads.append(t)

    for t in threads:
        t.start()
    for t in threads:
        t.join()

    end = time.time()
    print("总共用时{}秒".format((end - start)))
2.3 不同线程之间的数据共享, 对共享变量的锁定
# -*- coding: UTF-8 -*-

import threading

class Account:
    def __init__(self):
        self.balance = 0

    def add(self, lock):
        # 获得锁
        lock.acquire()
        for i in range(0, 100000):
            self.balance += 1
        # 释放锁
        lock.release()

    def delete(self, lock):
        # 获得锁
        lock.acquire()
        for i in range(0, 100000):
            self.balance -= 1
            # 释放锁
        lock.release()


if __name__ == "__main__":
    account = Account()
    lock = threading.Lock()
    # 创建线程
    thread_add = threading.Thread(target=account.add, args=(lock,), name='Add')
    thread_delete = threading.Thread(target=account.delete, args=(lock,), name='Delete')

    # 启动线程
    thread_add.start()
    thread_delete.start()

    # 等待线程结束
    thread_add.join()
    thread_delete.join()

    print('The final balance is: {}'.format(account.balance))

The final balance is: 0

标签:__,name,format,Python,self,print,time,进程,多线程
From: https://www.cnblogs.com/jessecheng/p/17405838.html

相关文章

  • Python try 和 except
    使用场景:当代码有可能报错,但不想由于代码报错而中断整个代码的运行,就可以使用。#用法try:xxx#需要运行的代码exceptExceptionase:#可以根据可能发生的error类型,但是Exception比较万能print(e) 参考:blog.csdn.net/chengxuyuanlaow/article/details/1275......
  • python3 获取mongodb表中数据的条数
    说明:此处考虑了时区,mongodb默认使用"格林威治时间"1#!/usr/bin/python323importpymongo4importdatetime5importpytz67#统计8"""9/usr/bin/pip3install-Ivpymongo-ihttp://pypi.douban.com/simple/--trusted-hostpypi.douban.com......
  • 在内陆指定国内pip安装源安装python第三方库
    Python官方网站提供了第三方库索引网站(PyPI:thePythonPackageIndex)https://pypi.org,内陆需要代理才能访问。在内陆指定国内pip安装源安装python第三方库,在Windows的CMD窗口运行:pipinstalldocx-ihttps://mirrors.aliyun.com/pypi/simple/pipinstallopenpyxl-ihttps://m......
  • mac 12以上python环境问题
    每次因为环境问题,会导致浪费很多时间,故有必要写一篇博客记录一下,防止以后踩坑,没有升级的,建议升级到mac12以上我现在的系统版本是13.3.1内置的python3版本是3.9.6。  由于项目里需要使用python2版本,故需要装一下python2版本:下载地址: https://www.python.org/downloads/......
  • python 基础教程:使用jieba库对文本进行分词
    一、jieba库是什么?Python的jieba库是一个中文分词工具,它可以将一段中文文本分割成一个一个的词语,方便后续的自然语言处理任务,如文本分类、情感分析等。jieba库使用了基于前缀词典的分词方法,能够处理中文的各种复杂情况,如歧义词、新词等。它还提供了多种分词模式,如精确模式、全......
  • python3 获取mongodb表的索引
    说明:此处脚本考虑到mongodb里面数据存储的时区转换,mongodb里面的数据使用的是"格林威治"时间1#!/usr/bin/python323importpytz4frompymongoimportMongoClient56"""7/usr/bin/pip3install-Ivpytz-ihttp://pypi.douban.com/simple/--trusted-host......
  • Python-解决字符串编码UnicodeEncodeError错误
     data_results="123456789\u93b4\u612c\u59db\u2022"#将字符串转换为字节序列:使用encode方法将字符串转换为字节序列,并指定编码格式为utf-8print(data_results.encode('utf-8'))#使用encode方法将字符串转换为字节序列,并指定编码格式为gbk,使用ignore参数忽略无法处理的字......
  • python高级技术(线程一)
    一线程理论1有了进程为什么要有线程进程有很多优点,它提供了多道编程,让我们感觉我们每个人都拥有自己的CPU和其他资源,可以提高计算机的利用率。很多人就不理解了,既然进程这么优秀,为什么还要线程呢?其实,仔细观察就会发现进程还是有很多缺陷的,主要体现在两点上:进程只能在一个时......
  • JAVA基础(多线程Thread和Runnable的使用区别
    [color=red][size=x-large]两种定义方式[/size][/color]定义方式一:classTestThreadextendsThread{publicvoidrun(){........................}}Threadt=newTestThread();t.run()//或者t.start();定义方式二:Threadt=newRunnabl......
  • How to use the Raspberry Pi and Python to control a buzzer All In One
    HowtousetheRaspberryPiandPythontocontrolabuzzerAllInOne如何使用树莓派和Python来控制蜂鸣器蜂鸣器有源蜂鸣器vs无源蜂鸣器现在有很多人对有源蜂鸣器和无源蜂鸣器的概念不是很清楚,这里做简单介绍,希望对大家日后使用有所帮助。注意,这里的“源”不是指......