Возможным решением является добавление массива 1d numpy, созданного из Series для предотвращения выравнивания столбцов DataFrame к индексу Series:
df = df + s.values
print (df)
A B C
0 0.207070 1.995021 4.829518
1 0.819741 2.802982 2.801355
Если те же столбцы и значения индекса работают с sum
:
Вам нужно будет мультиплексировать операции io в событийный интерфейс (select/poll), чтобы вы могли использовать ОС для выполнения ожидания, при этом имея возможность планировать другие волокна. select/poll имеют аргумент таймаута - для волокон, которые хотят спать, вы можете создать очередь приоритетов, которая использует эту опцию select/poll для эмуляции спящего вызова.
Пытаясь обслуживать волокна, которые блокируют операции (чтение/запись вызова/сон и т.д.), непосредственно не сработает, если вы не запланируете каждое волокно в собственном потоке - какой вид бьёт по назначению.
Смотрите http://swtch.com/libtask/ для рабочей реализации.
.С точки зрения реализации вы можете начать с реализации асинхронного цикла обработки событий. Затем вы можете просто реализовать планирование оптоволокна, используя асинхронные обработчики событий для переключения на соответствующее оптоволокно.
Волокно ожидания / ожидания просто означает, что оно не запланировано на данный момент - оно просто переключается на Вместо этого цикл событий.
Кстати, если вы ищете какой-то реальный код, взгляните на http://svn.cmeerw.net/src/nginetd/trunk/ , который все еще в работе , но пытается реализовать планировщик оптоволокна поверх многопоточного цикла событий (с портами завершения ввода-вывода Win32 или управляемым краем epoll).
Вероятно, вам следует взглянуть на семейство функций setcontext ( http://en.wikipedia.org/wiki/Setcontext ). Это будет означать, что в вашем приложении вам необходимо будет повторно реализовать все функции, которые могут блокировать (чтение, запись, спящий режим и т. Д.) В асинхронные формы и вернуться к планировщику.
Только «волокно планировщика» будет ждать на Завершение событий с использованием select (), poll () или epoll (). Это означает, что когда планировщик находится в режиме ожидания, процесс будет находиться в режиме ожидания в вызове select / poll / epoll и не будет загружать ЦП.