deftask(task_id): global shared_variable # 模拟任务执行 # 获取锁,确保对共享变量的访问是线程安全的 for _ inrange(1000000): with lock: shared_variable += 1 # shared_variable += 1
defmain(): num_threads = 2
with concurrent.futures.ThreadPoolExecutor(max_workers=num_threads) as executor: # 提交任务到线程池 futures = [executor.submit(task, i) for i inrange(2)] # 收集每个任务的结果 results = [] for future in concurrent.futures.as_completed(futures): result = future.result() results.append(result) print(f"results = {results}") print(f"shared_variable = {shared_variable}")
import multiprocessing from concurrent.futures import ThreadPoolExecutor import threading import time
defprint_numbers(lock): global counter results = [] for i inrange(10000): with lock: results.append(i) return results
defprocess_task(num): results = [] counter = 0 time.sleep(5) lock = threading.Lock() print(f"lock = {lock}") print(f"lock id = {id(lock)}") # 使用id()函数获取锁对象的内存地址 with ThreadPoolExecutor(max_workers=8) as executor: futures = [executor.submit(print_numbers,lock) for _ inrange(8)] for future in futures: results.extend(future.result()) return results
defmain(): t1 = time.time() with multiprocessing.Pool(processes=4) as pool: results = pool.map(process_task, range(4)) final_results = [sublist for sublist in results ] print(f"Final results (length: {len(final_results)})") t2 = time.time() # for line in final_results: # print(line) print(f"cost time = {t2-t1}")
import multiprocessing from concurrent.futures import ThreadPoolExecutor import threading import time
defprint_numbers(lock): global counter results = [] for i inrange(10000): with lock: results.append(i) return results
defprocess_task(num): results = [] counter = 0 time.sleep(5) lock = threading.Lock() print(f"lock = {lock}") print(f"lock id = {id(lock)}") # 使用id()函数获取锁对象的内存地址 with ThreadPoolExecutor(max_workers=8) as executor: futures = [executor.submit(print_numbers,lock) for _ inrange(8)] for future in futures: results.extend(future.result()) return results
defmain(): t1 = time.time() with multiprocessing.Pool(processes=4) as pool: results = pool.map(process_task, range(4)) final_results = [sublist for sublist in results ] print(f"Final results (length: {len(final_results)})") t2 = time.time() # for line in final_results: # print(line) print(f"cost time = {t2-t1}")
defthread_task(thread_id): with thread_lock: print(id(thread_lock)) print(f"Thread {thread_id} in process {multiprocessing.current_process().name} is running")
defprocess_task(process_id): # 每个进程创建多个线程 threads = [] for i inrange(1): # 假设每个进程创建3个线程 thread = threading.Thread(target=thread_task, args=(i,)) threads.append(thread) thread.start()
# 等待所有线程完成 for thread in threads: thread.join()
if __name__ == "__main__": processes = []
# 创建4个进程 for i inrange(4): process = multiprocessing.Process(target=process_task, args=(i,)) processes.append(process) process.start()
# 等待所有进程完成 for process in processes: process.join()