python3-启动多个线程

在Python3中尝试使用for循环启动多个线程时,遇到线程串行执行的问题。原本的代码会导致线程逐一启动并等待前一个线程结束。通过修正参数传递方式,解决了线程阻塞问题,实现线程并行运行。修改后的代码成功并发执行了所有线程。

问题:在for循环里面想同时启动多个线程,但是程序运行过程中产生的是线程一个一个启动,即:启动第一个线程之后主线程等待子线程运行完成之后才启动第二个,代码如下:

import threading
import time
def thread(num):
    print("这是线程", num)
    for i in range(3):
        print('线程:', num, ':', i)
        time.sleep(1)
def thread1(num):
    print("这是线程", num)
    for i in range(3):
        print('线程:', num, ':', i)
        time.sleep(1)
def thread3(num):
    print("这是线程", num)
    for i in range(3):
        print('线程:', num, ':', i)
        time.sleep(1)      
if __name__ == '__main__':
    tq = threading.Thread(target=thread(1), args=())
    tq.start()
    tw = threading.Thread(target=thread1(2), args=())
    tw.start()
    te = threading.Thread(target=thread3(3), args=())
    te.start()
    for i in range(10):            
        t = "th" + str(i)
        print(t)
        t = threading.Thread(target=thread(i), args=())    

运行结果:
在这里插入图片描述

解决:
好吧,对python多线程编程语法理解甚少,参数传递问题。

tq = threading.Thread(***target=thread(1), args=()***)
tw = threading.Thread(***target=thread1(2), args=()***)
te = threading.Thread(***target=thread3(3), args=()***)

改为:

import threading
import time
def thread(num):
    print("这是线程", num)
    for i in range(3):
        print('线程:', num, ':', i)
        time.sleep(1)
def thread1(num):
    print("这是线程", num)
    for i in range(3):
        print('线程:', num, ':', i)
        time.sleep(1)
def thread3(num):
    print("这是线程", num)
    for i in range(3):
        print('线程:', num, ':', i)
        time.sleep(1)    
if __name__ == '__main__':
    tq = threading.Thread(target=thread, args=(1,))
    tq.start()
    tw = threading.Thread(target=thread1, args=(2,))
    tw.start()
    te = threading.Thread(target=thread3, args=(3,))
    te.start()
    T_POOL = []
    for i in range(10):        
        t = "th" + str(i)
        print(t)
        t = threading.Thread(target=thread, args=(i,))  
        t.start()
        T_POOL.append(t)      
    
    tq.join()
    tw.join()
    te.join()
    for t in T_POOL:
        t.join()

运行结果:
在这里插入图片描述

可以结合多线程爬虫的实现和数据保存至指定文件夹的方式来启动多个线程抓取数据并保存到不同文件夹。 下面是一个示例代码,该代码模拟了多线程抓取数据并保存到不同文件夹的过程: ```python import threading import os import requests # 模拟抓取数据的函数 def fetch_data(url): try: response = requests.get(url) return response.text except Exception as e: print(f"Error fetching {url}: {e}") return None # 保存数据到指定文件夹的函数 def save_data(data, folder_path, file_name): if not os.path.exists(folder_path): os.makedirs(folder_path) file_path = os.path.join(folder_path, file_name) with open(file_path, 'w', encoding='utf-8') as f: f.write(data) # 线程执行的函数 def worker(url, folder_path, file_name): data = fetch_data(url) if data: save_data(data, folder_path, file_name) # 主函数,启动多个线程 def multi_thread_fetch(urls, folder_paths, file_names): threads = [] for url, folder_path, file_name in zip(urls, folder_paths, file_names): thread = threading.Thread(target=worker, args=(url, folder_path, file_name)) threads.append(thread) thread.start() # 等待所有线程完成 for thread in threads: thread.join() # 示例使用 urls = ['https://example.com/page1', 'https://example.com/page2'] folder_paths = ['data/folder1', 'data/folder2'] file_names = ['page1.html', 'page2.html'] multi_thread_fetch(urls, folder_paths, file_names) ``` 在上述代码中,`fetch_data` 函数用于模拟从指定 URL 抓取数据;`save_data` 函数用于将抓取到的数据保存到指定的文件夹中;`worker` 函数作为线程执行的函数,调用 `fetch_data` 和 `save_data` 完成数据的抓取和保存;`multi_thread_fetch` 函数用于启动多个线程,每个线程负责一个 URL 的数据抓取和保存任务。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值