why run_coroutine_threadsafe so slow?
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 25/100
Hướng nghiên cứu
Bắt đầu bằng cách chạy các ví dụ hai vòng lặp và một vòng lặp được cung cấp với uvloop 0.14.0, Python 3.6.5 và nền tảng đã nêu, sau đó so sánh thời gian xung quanh asyncio.run_coroutine_threadsafe và await my_sum(). Hoàn thành nghĩa là xác định nguồn gốc của độ trễ bổ sung giữa các thread hoặc ghi lại lý do nó được dự kiến, kèm theo một bản tái hiện hoặc benchmark tập trung.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
- uvloop version: 0.14.0
- Python version: 3.6.5
- Platform: centos 6.3 cpu:Intel(R) Xeon(R) Gold 5218 CPU @ 2.30GHz
I have a need to run my code in two loop, demo code like below
import threading
import asyncio
import time
import traceback
import uvloop
asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
g_loop = asyncio.get_event_loop()
print("g_loop", id(g_loop), g_loop)
async def my_sum():
result = 0
for i in range(1000):
result += 1
async def func():
global g_loop
try:
while True:
s = time.time()
# await my_sum()
future = asyncio.run_coroutine_threadsafe(my_sum(), g_loop)
result = future.result(1)
e = time.time()
print("total", (e - s) * 1000 * 1000)
await asyncio.sleep(0.00001)
except Exception as e:
print("in this======", traceback.format_exc())
def thread_loop():
loop = asyncio.new_event_loop()
print("local loop", id(loop))
task = loop.create_task(func())
loop.run_forever()
t = threading.Thread(target=thread_loop)
t.start()
g_loop.run_forever()
t.join()
then, the print time cost about 100us ~ 150us
total 107.52677917480469
total 100.13580322265625
total 154.97207641601562
total 144.48165893554688
total 141.62063598632812
total 135.18333435058594
total 174.99923706054688
total 99.89738464355469
total 174.7608184814453
total 102.04315185546875
but when I run my code in one loop
import threading
import asyncio
import time
import traceback
import uvloop
asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
g_loop = asyncio.get_event_loop()
print("g_loop", id(g_loop), g_loop)
async def my_sum():
result = 0
for i in range(1000):
result += 1
async def func():
global g_loop
try:
while True:
s = time.time()
await my_sum()
# future = asyncio.run_coroutine_threadsafe(my_sum(), g_loop)
# result = future.result(1)
e = time.time()
print("total", (e - s) * 1000 * 1000)
await asyncio.sleep(0.00001)
except Exception as e:
print("in this======", traceback.format_exc())
def thread_loop():
loop = asyncio.new_event_loop()
print("local loop", id(loop))
task = loop.create_task(func())
loop.run_forever()
t = threading.Thread(target=thread_loop)
t.start()
g_loop.run_forever()
t.join()
the time cost about 40us ~ 80us
total 40.0543212890625
total 39.577484130859375
total 39.577484130859375
total 39.577484130859375
total 76.2939453125
total 40.0543212890625
total 39.10064697265625
total 81.53915405273438
total 40.0543212890625
Does change a thread need extra 60us ~ 70us? why so slow?
- Ngôn ngữ chính
- Cython
- Star
- 11.9k
- Fork
- 615
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của MagicStack/uvloop
-
License not clear Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
MagicStack/uvloop#759 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
MagicStack/uvloop#741 · 2 reaction ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
MagicStack/uvloop#702 · 8 bình luận · 9 reaction ·
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 25/100
MagicStack/uvloop#766 ·
-
Directly constructed subprocess pipe protocols segfault when callbacks use a non-process owner Đang mở
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 52/100
MagicStack/uvloop#765 ·
Tất cả issue của MagicStack/uvloop
Issue tương tự
-
enhancement
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
canonical/paas-charm#368 · 1 bình luận ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
-
tech debt
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
-
area:workflow bug ready-for-agent
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
fil-donadoni/tolaria#4409 ·
-
status/awaiting_triage
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100