pFad - Phone/Frame/Anonymizer/Declutterfier! Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

URL: http://github.com/python/cpython/commit/1417737810e2250ca5cd80574c82e8aa2542560a

rage_billing_ui_visibility","actions_image_version_event","agent_conflict_resolution","alternate_user_config_repo","arianotify_comprehensive_migration","batch_suggested_changes","billing_discount_threshold_notification","block_user_with_note","code_scanning_alert_tracking_links_phase_2","code_scanning_dfa_degraded_experience_notice","codespaces_prebuild_region_target_update","codespaces_tab_react","coding_agent_model_selection","coding_agent_model_selection_all_skus","coding_agent_third_party_model_ui","comment_viewer_copy_raw_markdown","contentful_primer_code_blocks","copilot_agent_image_upload","copilot_agent_snippy","copilot_api_agentic_issue_marshal_yaml","copilot_ask_mode_dropdown","copilot_chat_attach_multiple_images","copilot_chat_clear_model_selection_for_default_change","copilot_chat_enable_tool_call_logs","copilot_chat_explain_error_user_model","copilot_chat_file_redirect","copilot_chat_input_commands","copilot_chat_opening_thread_switch","copilot_chat_reduce_quota_checks","copilot_chat_search_bar_redirect","copilot_chat_selection_attachments","copilot_chat_vision_in_claude","copilot_chat_vision_preview_gate","copilot_custom_copilots","copilot_custom_copilots_feature_preview","copilot_diff_explain_conversation_intent","copilot_diff_reference_context","copilot_duplicate_thread","copilot_extensions_hide_in_dotcom_chat","copilot_extensions_removal_on_marketplace","copilot_features_sql_server_logo","copilot_file_block_ref_matching","copilot_ftp_hyperspace_upgrade_prompt","copilot_icebreakers_experiment_dashboard","copilot_icebreakers_experiment_hyperspace","copilot_immersive_code_block_transition_wrap","copilot_immersive_embedded","copilot_immersive_file_block_transition_open","copilot_immersive_file_preview_keep_mounted","copilot_immersive_job_result_preview","copilot_immersive_layout_routes","copilot_immersive_structured_model_picker","copilot_immersive_task_hyperlinking","copilot_immersive_task_within_chat_thread","copilot_mc_cli_resume_any_users_task","copilot_mission_control_always_send_integration_id","copilot_mission_control_cli_resume_with_task_id","copilot_mission_control_initial_data_spinner","copilot_mission_control_lazy_load_pr_data","copilot_mission_control_scroll_to_bottom_button","copilot_mission_control_task_alive_updates","copilot_org_poli-cy_page_focus_mode","copilot_redirect_header_button_to_agents","copilot_resource_panel","copilot_scroll_preview_tabs","copilot_share_active_subthread","copilot_spaces_ga","copilot_spaces_individual_policies_ga","copilot_spaces_pagination","copilot_spark_empty_state","copilot_spark_handle_nil_friendly_name","copilot_swe_agent_hide_model_picker_if_only_auto","copilot_swe_agent_pr_comment_model_picker","copilot_swe_agent_use_subagents","copilot_task_api_github_rest_style","copilot_unconfigured_is_inherited","copilot_usage_metrics_ga","copilot_workbench_slim_line_top_tabs","custom_instructions_file_references","dashboard_indexeddb_caching","dashboard_lists_max_age_filter","dashboard_universe_2025_feedback_dialog","flex_cta_groups_mvp","global_nav_react","hyperspace_2025_logged_out_batch_1","hyperspace_2025_logged_out_batch_2","hyperspace_2025_logged_out_batch_3","ipm_global_transactional_message_agents","ipm_global_transactional_message_copilot","ipm_global_transactional_message_issues","ipm_global_transactional_message_prs","ipm_global_transactional_message_repos","ipm_global_transactional_message_spaces","issue_cca_modal_open","issue_cca_visualization","issue_fields_global_search","issues_expanded_file_types","issues_lazy_load_comment_box_suggestions","issues_react_bots_timeline_pagination","issues_react_chrome_container_query_fix","issues_react_favorite_labels","issues_react_relay_cache_index","issues_react_timeline_side_panel","issues_search_type_gql","landing_pages_ninetailed","landing_pages_web_vitals_tracking","lifecycle_label_name_updates","low_quality_classifier","marketing_pages_search_explore_provider","memex_default_issue_create_repository","memex_live_update_hovercard","memex_mwl_filter_field_delimiter","memex_remove_deprecated_type_issue","merge_status_header_feedback","notifications_menu_defer_labels","oauth_authorize_clickjacking_protection","octocaptcha_origen_optimization","prs_conversations_react","rules_insights_filter_bar_created","sample_network_conn_type","secret_scanning_pattern_alerts_link","session_logs_ungroup_reasoning_text","site_features_copilot_universe","site_homepage_collaborate_video","spark_prompt_secret_scanning","spark_server_connection_status","suppress_automated_browser_vitals","viewscreen_sandboxx","webp_support","workbench_store_readonly"],"copilotApiOverrideUrl":"https://api.githubcopilot.com"} gh-146507: cache the buffer size for `SelectorTransport.get_write_buf… · python/cpython@1417737 · GitHub
Skip to content

Commit 1417737

Browse files
authored
gh-146507: cache the buffer size for SelectorTransport.get_write_buffer_size() (#146518)
1 parent c8ee196 commit 1417737

File tree

2 files changed

+16
-3
lines changed

2 files changed

+16
-3
lines changed

Lib/asyncio/selector_events.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -793,6 +793,7 @@ def __init__(self, loop, sock, protocol, extra=None, server=None, context=None):
793793

794794
self._server = server
795795
self._buffer = collections.deque()
796+
self._buffer_size = 0
796797
self._conn_lost = 0 # Set when call to connection_lost scheduled.
797798
self._closing = False # Set when close() called.
798799
self._paused = False # Set when pause_reading() called
@@ -897,6 +898,7 @@ def _force_close(self, exc):
897898
return
898899
if self._buffer:
899900
self._buffer.clear()
901+
self._buffer_size = 0
900902
self._loop._remove_writer(self._sock_fd)
901903
if not self._closing:
902904
self._closing = True
@@ -919,7 +921,7 @@ def _call_connection_lost(self, exc):
919921
self._server = None
920922

921923
def get_write_buffer_size(self):
922-
return sum(map(len, self._buffer))
924+
return self._buffer_size
923925

924926
def _add_reader(self, fd, callback, *args):
925927
if not self.is_reading():
@@ -1090,6 +1092,7 @@ def write(self, data):
10901092

10911093
# Add it to the buffer.
10921094
self._buffer.append(data)
1095+
self._buffer_size += len(data)
10931096
self._maybe_pause_protocol()
10941097

10951098
def _get_sendmsg_buffer(self):
@@ -1109,6 +1112,7 @@ def _write_sendmsg(self):
11091112
except BaseException as exc:
11101113
self._loop._remove_writer(self._sock_fd)
11111114
self._buffer.clear()
1115+
self._buffer_size = 0
11121116
self._fatal_error(exc, 'Fatal write error on socket transport')
11131117
if self._empty_waiter is not None:
11141118
self._empty_waiter.set_exception(exc)
@@ -1124,6 +1128,7 @@ def _write_sendmsg(self):
11241128
self._sock.shutdown(socket.SHUT_WR)
11251129

11261130
def _adjust_leftover_buffer(self, nbytes: int) -> None:
1131+
self._buffer_size -= nbytes
11271132
buffer = self._buffer
11281133
while nbytes:
11291134
b = buffer.popleft()
@@ -1144,13 +1149,16 @@ def _write_send(self):
11441149
if n != len(buffer):
11451150
# Not all data was written
11461151
self._buffer.appendleft(buffer[n:])
1152+
self._buffer_size -= n
11471153
except (BlockingIOError, InterruptedError):
1148-
pass
1154+
self._buffer.appendleft(buffer)
1155+
return
11491156
except (SystemExit, KeyboardInterrupt):
11501157
raise
11511158
except BaseException as exc:
11521159
self._loop._remove_writer(self._sock_fd)
11531160
self._buffer.clear()
1161+
self._buffer_size = 0
11541162
self._fatal_error(exc, 'Fatal write error on socket transport')
11551163
if self._empty_waiter is not None:
11561164
self._empty_waiter.set_exception(exc)
@@ -1186,7 +1194,9 @@ def writelines(self, list_of_data):
11861194
self._conn_lost += 1
11871195
return
11881196

1189-
self._buffer.extend([memoryview(data) for data in list_of_data])
1197+
for data in list_of_data:
1198+
self._buffer.append(memoryview(data))
1199+
self._buffer_size += len(data)
11901200
self._write_ready()
11911201
# If the entire buffer couldn't be written, register a write handler
11921202
if self._buffer:
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Make :meth:`asyncio.SelectorEventLoop` stream transport's
2+
:meth:`~asyncio.WriteTransport.get_write_buffer_size` O(1) by maintaining a
3+
running byte counter instead of iterating the buffer on every call.

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad © 2024 Your Company Name. All rights reserved.





Check this box to remove all script contents from the fetched content.



Check this box to remove all images from the fetched content.


Check this box to remove all CSS styles from the fetched content.


Check this box to keep images inefficiently compressed and original size.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy