Python y sus rutinas de biblioteca estándar son de código abierto. Por lo tanto, es muy fácil investigar este tipo de cosas para ver cómo se hace exactamente. Comencé con una búsqueda en Google para:
código fuente python time.sleep
y de los resúmenes de las páginas mejor clasificadas en los resultados de búsqueda, aprendí que el módulo fuente que tenía el código relevante está en timemodule.c. Entonces mi siguiente búsqueda fue por:
python timemodule.c
- Trabajo como analista de SAS BI. Estoy interesado en el programa MBA ejecutivo de FMS. ¿Será una buena elección?
- He fallado mucho. ¿Qué tengo que hacer?
- Cumpliré 16 años en el Reino Unido y solicitaré mi primera foto de pasaporte para adultos. No he cambiado mucho desde mi apariencia anterior. ¿Necesitaré una contra firma?
- Si siento que mi trabajo actual no tiene futuro y no estoy obteniendo nuevos trabajos, ¿debo dejar esto y buscar otros trabajos o quedarme y buscar otros trabajos?
- ¿Me han ofrecido una tarjeta verde, pero acabo de enterarme del impuesto de salida? ¿Hay alguna forma de evitar el impuesto de expatriación de los Estados Unidos?
y el resultado de búsqueda mejor clasificado me indicó:
python / cpython
Había muchas líneas en ese código fuente, así que busqué “dormir” dentro de la fuente usando el ctl-F de mi navegador. pysleep (línea 1417) parece ser el lugar correcto. Se implementa llamando al servicio de “suspensión” del sistema, por lo que Python no está haciendo una espera ocupada. El único bucle que veo en pysleep es cubrir la posibilidad de una interrupción que despierte el programa demasiado pronto, en cuyo caso presiona el botón de repetición y vuelve a dormir durante el tiempo restante. ¿No odias cuando suena el teléfono antes de que suene la alarma? Sé lo que hago.
La llamada al sistema de suspensión se documenta aquí: suspensión (3): suspensión durante un número específico de segundos. Las páginas man de Linux están organizadas como las páginas man tradicionales de Unix. la sección 1 documenta los comandos, la sección 3 documenta las funciones de la biblioteca C. De ahí el sueño (3). También hay una página de suspensión (1) porque hay un comando de suspensión para usar en los scripts de shell, pero timemodule.c está escrito en C, por lo que cuando llama a la suspensión (…) llama a la función de biblioteca C. Si está muy interesado en cómo funciona, gcc y su biblioteca también son de código abierto y puede buscar exactamente cómo se implementa. Estoy bastante seguro de que lo encontrará principalmente solo por un servicio del sistema. Si está hablando de un sistema Linux, Linux también es de código abierto y puede profundizar en el kernel para ver exactamente cómo funciona. en algún momento puede que tenga que leer sobre cómo los chips de hardware implementan interrupciones. pero quizás antes de llegar tan lejos decidas que ahora lo entiendes lo suficientemente bien como para usarlo. O, si está utilizando Windows, obtendrá una comprensión de la distinción entre código abierto y código cerrado. Si está de acuerdo con sus términos, Microsoft podría incluso permitirle mirar su código fuente, pero tenga cuidado. Es muy probable que aceptes no volver a escribir ningún código funcionalmente similar en tu carrera. Verdaderamente un trato con el diablo si alguna vez hubo uno.
Páginas de manual de Unix en la sección 2 llamadas al sistema de documentos. Por lo tanto, hay una página de manual “sleep (2)” que documenta la llamada al sistema que espero que encuentre en el código fuente de la función de biblioteca C que está documentada en la página de manual “sleep (3)”. Todo se puede conocer, pero hay mucho que saber …
Espero que eso ayude.