线程,线程池|进程,进程池

线程

import threading

lock=threading.Lock() #

lock=threading.RLock() #递归锁,多层锁定,多层解锁

lock.acquire()

lock.release()

import threading
import time
v = 10
#lock = threading.Lock() # 只能开一把
lock = threading.RLock()# 可以开多把

def task(arg):
    time.sleep(2)
    # 申请使用锁,其他人等
    lock.acquire()
    lock.acquire()
    global v
    v -= 1
    print(v)
    # 释放
    lock.release()
    lock.release()

for i in range(10):
    t = threading.Thread(target=task,args=(i,))
    t.start()

多个人使用锁

lock = threading.BoundedSemaphore(3)
lock.acquire()

lock.release()

import threading
import time
lock = threading.BoundedSemaphore(3)

def task(arg):
    # 申请使用锁,其他人等
    lock.acquire()
    time.sleep(1)
    global v
    v -= 1
    print(v)
    # 释放
    lock.release()

for i in range(10):
    t = threading.Thread(target=task,args=(i,))
    t.start()

事件(锁,所有锁的释放与锁定)

lock = threading.Event()

lock.wait()

lock.clear()

import threading
import time
lock = threading.Event()

def task(arg):
    time.sleep(1)
    # 锁住所有的线程
    lock.wait()
    # 申请使用锁,其他人等
    print(arg)

for i in range(10):
    t = threading.Thread(target=task,args=(i,))
    t.start()
while True:
    value = input(‘>>>>‘)
    if value == ‘1‘:
        lock.set()
        lock.clear()

指定释放几个线程锁

lock = threading.Condition()


import threading
import time
lock = threading.Condition()

def task(arg):
    time.sleep(1)
    # 锁住所有的线程
    lock.acquire()
    lock.wait()
    # 申请使用锁,其他人等
    print(‘线程‘,arg)
    lock.release()

for i in range(10):
    t = threading.Thread(target=task,args=(i,))
    t.start()
while True:
    value = input(‘>>>>‘)
    lock.acquire()
    lock.notify(int(value))  #指定释放几个锁
    lock.release()

线程池

from concurrent.futures import ThreadPoolExecutor  #导入指定模块
import time
import requests

def task(url):
    response=requests.get(url)
    print("请求结果",url,len(response.content))

url_list=[
    "http://www.baidu.com",
    "http://cn.bing.com",
    "http://www.oldboyedu.com"
]
pool=ThreadPoolExecutor(2)   #创建线程池
for url in url_list:
    pool.submit(task,url)        #线程池调用

自定义回调函数

from concurrent.futures import ThreadPoolExecutor
import time
import requests

def txt(future):
    cc=future.result()
    print(cc)
def task(url):
    response=requests.get(url)
    return(url,len(response.content))

url_list=[
    "http://www.baidu.com",
    "http://cn.bing.com",
    "http://www.oldboyedu.com"
]
pool=ThreadPoolExecutor(2)
for url in url_list:
    future=pool.submit(task,url)
    future.add_done_callback(txt)


进程from multiprocessing import Process #导入模块

from multiprocessing import Process
import time
def task(arg):
    time.sleep(arg)
    print(arg)

if __name__ == ‘__main__‘:
    for i in range(10):
        p = Process(target=task,args=(i,))
        p.daemon = True
        # p.daemon = False
        p.start()
        p.join(1)

    print(‘主进程最后...‘)

进程间内存共享

1、Array

from multiprocessing import Process,Array
import time
import threading

def task(num,li):
    li[num]=1
    print(list(li))

if __name__ == ‘__main__‘:
    v = Array("i",10)
    for i in range(10):
        p = Process(target=task,args=(i,v,))
        # p = threading.Thread(target=task,args=(i,v,))
        p.start()

2、Manager (内部socket对接连接)

Manager.list() Manager.dict()

from multiprocessing import Process,Manager
import time
import threading

def task(num,li):
    li.append(num)
    print(list(li))

if __name__ == ‘__main__‘:
    dic=Manager().list()
    for i in range(10):
        p = Process(target=task,args=(i,dic,))
        # p = threading.Thread(target=task,args=(i,v,))
        p.start()
        p.join()

进程池

from concurrent.futures import ProcessPoolExecutor

def call(arg):
    data = arg.result()
    print(data)

def task(arg):
    print(arg)
    return arg + 100

if __name__ == ‘__main__‘:
    pool = ProcessPoolExecutor(5)
    for i in range(10):
        obj = pool.submit(task,i)
        obj.add_done_callback(call)



 
 
时间: 2024-11-10 16:14:11

线程,线程池|进程,进程池的相关文章

内存池、进程池、线程池

首先介绍一个概念"池化技术 ".池化技术 一言以蔽之就是:提前保存大量的资源,以备不时之需以及重复使用. 池化技术应用广泛,如内存池,线程池,连接池等等.内存池相关的内容,建议看看Apache.Nginx等开源web服务器的内存池实现. 起因:由于在实际应用当中,分配内存.创建进程.线程都会设计到一些系统调用,系统调用需要导致程序从用户态切换到内核态,是非常耗时的操作.           因此,当程序中需要频繁的进行内存申请释放,进程.线程创建销毁等操作时,通常会使用内存池.进程池.

开启线程池和进程池

线程与进程的应用场合很多,主要处理并发与多任务.然而,当开启的线程与进程过多时,系统的开销过多会造成性能低下甚至崩溃.这时,希望出现一种方法能规定只能执行指定数量线程与进程的策略.特别是针对不知道要开启多少线程或进程,而有可能出现线程或进程过多的情况.于是,线程池与进程池出现了.python3以后增加了concurrent.futures模块,为异步执行提供了高级的接口. 线程池 concurrent.futures.ThreadPoolExecutor(max_workers=None, th

多进程 multiprocessing 多线程Threading 线程池和进程池concurrent.futures

multiprocessing.procsess 定义一个函数 def func():pass 在if __name__=="__main__":中实例化 p = process(target=子进程要执行的函数,args(函数的参数且必须以元组的方式传参)) p.start() 开启子进程 p.join() 感知子进程的结束,主进程等待子进程执行完后才退出 p.terminate() 结束一个子进程 p.is_alive() 查看某个进程是否还在运行 属性 p.name p.pid

python第三十七天,GIL全局解释器锁*****,线程池与进程池 同步异步,阻塞与非阻塞,异步回调

GIL全局解释器锁 1.什么是GIL 官方解释:'''In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple native threads from executing Python bytecodes at once. This lock is necessary mainly because CPython’s memory management is not thread-safe

GIL 线程池与进程池 同步与异步

1.GIL   全局解释器锁     只存在于cPython中,其他解释器中没有 释以:在cpython中它是一种互斥锁是为了防止多个线程在同一时间执行python字节码,这个锁是非常重要的,因为cpython的内存管理是非线程安全的,而且很多已经存在的代码需要依赖这个锁,所以即使它影响了程序效率也无法将其去除. 优点:保证了cpython中内存管理是线程安全的 缺点:使得多线程无法并行 注:非线程安全:多个线程访问统一个资源,会有问题: 线程安全:多个线程访问统一个资源,不会有问题,与之相反

5,线程池,进程池,协程,IO模型

今日内容: 1,线程池 2,进程池 3,协程 4,IO 模型 服务端要满足这三个条件: 1,24小时不间断的提供服务 2,能够支持高并发 3,要有固定的IP地址和端口在服务端这个地方会出现阻塞态情况: 阻塞IO 操作有: 1,链接循环 2,通信循环单线程实现高并发思路: 为了更好的提高程序的运行效率,即实现高并发,让服务端同时能够接受多个客户端的消息 所以一般在服务端会把,连接循环和通信循环封装为两个不同的函数方法, 这样当一个客户端与服务端进行通信时,服务端的连接循环可以和其他客户端进行连接,

线程池和进程池

from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor import os import time ''' 进程池与线程池 开进程开线程都需要消耗资源,只不过两者比较的情况线程消耗的资源比较少 在计算机能够承受范围之内最大限度的利用计算机 什么是池? 在保证计算机硬件安全的情况下最大限度的利用计算机 池其实是降低了程序的运行效率 但是保证了计算机硬件的安全 (硬件的发展跟不上软件的速度) ''' # pool

第十五章、线程池和进程池

目录 第十五章.线程池和进程池 一.线程计时器 二.异步同步 三.线程池和进程池 第十五章.线程池和进程池 一.线程计时器 from threading import Timer,current_thread def task(x): print('%s run....' %x) print(current_thread().name) if __name__ == '__main__': t=Timer(3,task,args=(10,)) # 3s后执行该线程 t.start() print

Python 线程----线程方法,线程事件,线程队列,线程池,GIL锁,协程,Greenlet

主要内容: 线程的一些其他方法 线程事件 线程队列 线程池 GIL锁 协程 Greenlet Gevent 一. 线程(threading)的一些其他方法 from threading import Thread import threading import time def work(): time.sleep(1) print("子线程对象>>>", threading.current_thread()) # 子线程对象 print("子线程名称>

Python使用进程池管理进程和进程间通信

与线程池类似的是,如果程序需要启动多个进程,也可以使用进程池来管理进程.程序可以通过 multiprocessing 模块的 Pool() 函数创建进程池,进程池实际上是 multiprocessing.pool.Pool 类. 进程池具有如下常用方法: 1.apply(func[, args[, kwds]]):将 func 函数提交给进程池处理.其中 args 代表传给 func 的位置参数,kwds 代表传给 func 的关键字参数.该方法会被阻塞直到 func 函数执行完成. 2.app