forked from p46318075/CodePattern
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.2 KiB
53 lines
1.2 KiB
from concurrent.futures import ThreadPoolExecutor, as_completed
|
|
import threading
|
|
import util
|
|
|
|
|
|
@util.measure_performance
|
|
def compute_task():
|
|
threads = [threading.Thread(target=util.compute_task) for _ in range(5)]
|
|
for thread in threads:
|
|
thread.start()
|
|
for thread in threads:
|
|
thread.join()
|
|
|
|
|
|
@util.measure_performance
|
|
def compute_task_threadpool():
|
|
with ThreadPoolExecutor(max_workers=5) as executor:
|
|
tasks = [executor.submit(util.compute_task) for _ in range(5)]
|
|
for future in as_completed(tasks):
|
|
future.result()
|
|
|
|
|
|
@util.measure_performance
|
|
def io_task():
|
|
threads = [
|
|
threading.Thread(target=util.fetch_url, args=(url, ))
|
|
for url in util.urls
|
|
]
|
|
for thread in threads:
|
|
thread.start()
|
|
for thread in threads:
|
|
thread.join()
|
|
|
|
|
|
# 多线程+线程池优化
|
|
@util.measure_performance
|
|
def io_task_threadpool():
|
|
with ThreadPoolExecutor(max_workers=5) as executor:
|
|
tasks = [executor.submit(util.fetch_url, url) for url in util.urls]
|
|
for future in as_completed(tasks):
|
|
future.result()
|
|
|
|
|
|
def main():
|
|
compute_task()
|
|
compute_task_threadpool()
|
|
io_task()
|
|
io_task_threadpool()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|