Python学习笔记(16), 多线程 & 分布式进程

本文介绍了Python中的多线程,指出由于GIL全局锁,Python的多线程并不能充分利用多核CPU,推荐使用多进程实现多核任务。同时讲解了线程锁、ThreadLocal、进程与线程的区别,以及Python的分布式进程实现,强调了Queue在分布式进程中的作用,并探讨了异步I/O和协程在多任务处理中的应用。
摘要由CSDN通过智能技术生成

多线程

Python中的线程是真正的POSIX Thread,而不是模拟出来的线程。这一点与Java不同,Java中的线程是运行在JVM上的线程。

注意, Python由于设计时有GIL全局锁,导致了过线程无法利用多核。多线程的并发在Python中就是一个美丽的梦。

尽管如此,还是来学习一下Python中的多线程,用threading这个高级模块。启动一个线程就把一个函数传入并创建Thread实例,然后调用start()开始执行。

import time, threading

# 新线程执行的代码:
def loop():
    print('thread % s is running...' % threading.current_thread().name)
    n = 0
    while n < 5:
        n = n + 1
        print('thread %s >>> %s' % (threading.current_thread().name, n))
        time.sleep(1)
    print('thread %s ended' % threading.current_thread().name)

print('thread %s is running...' % threading.current_thread().name)
t = threading.Thread(target=loop, name='LoopThread')
t.start()
t.join()
print('thread %s ended' % threading.current_thread().name)
thread MainThread is running...
thread LoopThread is running...
thread LoopThread >>> 1
thread LoopThread >>> 2
thread LoopThread >>> 3
thread LoopThread >>> 4
thread LoopThread >>> 5
thread LoopThread ended
thread MainThread ended

任何进程默认会启动一个线程,这个线程名字就叫MainThread。 在创建Thread时,也可以指定线程名称,这里指定为LoopThread.

Lock

每个进程都有自己独立的地址空间,但是线程不一样,一个进程可以有多个线程,进程内的数据可以被线程共享。这样就存在同步的问题,解决同步问题的常用方法就是加锁。

import time, threading

balance = 0

def change_it(n):
    global balance   # balance是全局变量,回忆变量作用域部分
    balance = balance + n
    balance = balance - n

def run_thread(n):
    for i in range(10000000):
        change_it(n)

t1 = threading.T
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值