threading多线程试用

本文通过一个简单的Python程序对比了单线程与多线程的执行效率,并发现由于Global Interpreter Lock (GIL)的存在,多线程并不一定比单线程快。文章探讨了GIL对Python多线程的影响及其在不同版本中的表现。
# -*- coding: utf-8 -*-

import threading
from time import ctime,sleep
import time

def h():

    sum=0
    for j in range(200):
        print('hello')
    print('end')

def b(arg):

    for j in range(40):
        print('byebye')




if __name__=='__main__':
    thread_list=[]
    A=time.clock()
    print('单线程start%s'%ctime())
    h()
    B=time.clock()
    print('over,%s'%ctime())
    print(B-A)
    C=time.clock()
    print('5线程start%s'%ctime())
    for i in range(5):
        t = threading.Thread(target=b,args=(i,))
        t.setDaemon(True)
        thread_list.append(t)
    for t in thread_list:
        t.start()

    for t in thread_list:
        t.join()
    print('end of 5')


    D=time.clock()
    print('over,%s'%ctime())
    print(D-C)

同一个函数拆分为5个县城来进行,反而比单线程慢了0.002792028726282秒=0.003619162331-0.000827133604718

网上解答是的Global Interpreter Lock原因,特别是PYTHON2.+,PYTHON3.+好像已经改进了全局锁

当使用Python进行for循环时,可以使用线程(Thread)来提高效率。线程是一种轻量级的执行单元,可以在同一进程中并发执行多个任务。 下面是一个示例代码,演示如何使用线程来加速for循环的执行: ```python import threading # 定义一个线程类,继承自threading.Thread class MyThread(threading.Thread): def __init__(self, start, end): threading.Thread.__init__(self) self.start = start self.end = end def run(self): # 在run方法中执行for循环的部分代码 for i in range(self.start, self.end): # 执行你的具体操作,这里只是打印i的值 print(i) # 定义一个函数,用于执行for循环 def run_for_loop(start, end, num_threads): # 计算每个线程需要处理的迭代次数 step = (end - start) // num_threads # 创建并启动多个线程 threads = [] for i in range(num_threads): thread_start = start + i * step thread_end = thread_start + step thread = MyThread(thread_start, thread_end) threads.append(thread) thread.start() # 等待所有线程执行完毕 for thread in threads: thread.join() # 调用函数来执行for循环 run_for_loop(0, 1000000, 4) ``` 在上面的示例代码中,我们首先定义了一个继承自`threading.Thread`的线程类`MyThread`,然后在`run`方法中执行了具体的for循环操作。接着,定义了一个`run_for_loop`函数,用于创建和启动多个线程,并等待它们的执行完成。 通过将迭代范围分成多个子范围,并将每个子范围分配给不同的线程来执行,我们可以实现并行处理,从而提高for循环的效率。 请注意,使用线程来并行处理for循环可能会遇到线程安全的问题,如共享变量的访问。在实际使用中,您可能需要使用互斥锁(Lock)等机制来确保线程间的数据同步和安全访问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值