Для остановок цикла в первой итерации [дубликат]

еще один способ сделать это:

df['period'] = df['Year'].astype(str) + df['quarter']

или бит медленнее:

df['period'] = df[['Year','quarter']].astype(str).sum(axis=1)

Давайте проверим его на 200K строках DF:

In [250]: df
Out[250]:
   Year quarter
0  2014      q1
1  2015      q2

In [251]: df = pd.concat([df] * 10**5)

In [252]: df.shape
Out[252]: (200000, 2)

UPDATE: график времени Pandas 0.23.0

UPDATE: новые тайминги с использованием Pandas 0.19.0

Сроки без CPU / GPU (отсортировано от самого быстрого до самого медленного):

In [107]: %timeit df['Year'].astype(str) + df['quarter']
10 loops, best of 3: 131 ms per loop

In [106]: %timeit df['Year'].map(str) + df['quarter']
10 loops, best of 3: 161 ms per loop

In [108]: %timeit df.Year.str.cat(df.quarter)
10 loops, best of 3: 189 ms per loop

In [109]: %timeit df.loc[:, ['Year','quarter']].astype(str).sum(axis=1)
1 loop, best of 3: 567 ms per loop

In [110]: %timeit df[['Year','quarter']].astype(str).sum(axis=1)
1 loop, best of 3: 584 ms per loop

In [111]: %timeit df[['Year','quarter']].apply(lambda x : '{}{}'.format(x[0],x[1]), axis=1)
1 loop, best of 3: 24.7 s per loop

Сроки с использованием оптимизации CPU / GPU:

In [113]: %timeit df['Year'].astype(str) + df['quarter']
10 loops, best of 3: 53.3 ms per loop

In [114]: %timeit df['Year'].map(str) + df['quarter']
10 loops, best of 3: 65.5 ms per loop

In [115]: %timeit df.Year.str.cat(df.quarter)
10 loops, best of 3: 79.9 ms per loop

In [116]: %timeit df.loc[:, ['Year','quarter']].astype(str).sum(axis=1)
1 loop, best of 3: 230 ms per loop

In [117]: %timeit df[['Year','quarter']].astype(str).sum(axis=1)
1 loop, best of 3: 230 ms per loop

In [118]: %timeit df[['Year','quarter']].apply(lambda x : '{}{}'.format(x[0],x[1]), axis=1)
1 loop, best of 3: 9.38 s per loop

9
задан pradyunsg 18 February 2013 в 17:02
поделиться

3 ответа

Я бы рекомендовал eventlet и зеленые потоки для этого.

Twisted - хорошая библиотека, но небольшая крутая кривая обучения для такого простого использования.

Ознакомьтесь с некоторыми примерами здесь .

3
ответ дан marr75 25 August 2018 в 16:33
поделиться

Попробуйте, прежде чем принимать, установите тайм-аут на сокет:

comSocket.settimeout(5.0)
try:
    rawData = comSocket.recv(512)
except socket.timeout:
    print "No response from server"
0
ответ дан Russell Borogove 25 August 2018 в 16:33
поделиться

Вы можете попробовать тайм-аут, например, код Russel, или вы можете использовать неблокирующий сокет, как показано в приведенном ниже коде. Он никогда не будет блокироваться в socket.recv, и вы можете использовать его внутри цикла, чтобы повторять столько раз, сколько захотите. Таким образом, ваша программа не будет зависать при таймауте. Таким образом, вы можете проверить, доступны ли данные, а если нет, вы можете делать другие вещи и повторять попытку позже.

socket.setblocking(0)
while (retry_condition):
    try:
        data = socket.recv(512)
    except socket.error:
        '''no data yet..'''
11
ответ дан Seanny123 25 August 2018 в 16:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: