我对如何使用asyncio.Queue特定的生产者-消费者模式感到困惑,在该模式中,生产者和消费者都可以同时独立运行。
首先,请考虑以下示例,该示例紧随docs中的asyncio.Queue示例:
import asyncio
import random
import time
async def worker(name, queue):
while True:
sleep_for = await queue.get()
await asyncio.sleep(sleep_for)
queue.task_done()
print(f'{name} has slept for {sleep_for:0.2f} seconds')
async def main(n):
queue = asyncio.Queue()
total_sleep_time = 0
for _ in range(20):
sleep_for = random.uniform(0.05, 1.0)
total_sleep_time += sleep_for
queue.put_nowait(sleep_for)
tasks = []
for i in range(n):
task = asyncio.create_task(worker(f'worker-{i}', queue))
tasks.append(task)
started_at = time.monotonic()
await queue.join()
total_slept_for = time.monotonic() - started_at
for task in tasks:
task.cancel() …Run Code Online (Sandbox Code Playgroud) 我被一个似乎与asyncio+ 相关的问题困扰,aiohttp因此,当发送大量并发GET请求时,超过85%的请求引发了一个aiohttp.client_exceptions.ClientConnectorError异常,最终源于
socket.gaierror(8, 'nodename nor servname provided, or not known')
Run Code Online (Sandbox Code Playgroud)
在主机/端口上发送单个GET请求或执行基础DNS解析时,不会引发此异常.
虽然在我的真实代码中,我正在进行大量自定义,例如使用自定义TCPConnector实例,但我可以仅使用"默认" aiohttp类实例和参数来重现问题,如下所示.
我跟踪了回溯,异常的根与DNS解析有关.它来自于调用的_create_direct_connection方法.aiohttp.TCPConnector._resolve_host()
我也尝试过:
aiodnssudo killall -HUP mDNSResponderfamily=socket.AF_INET作为参数TCPConnector(虽然我很确定aiodns无论如何都使用它).这使用2而不是默认的int 0到该参数ssl=True和ssl=False一切都无济于事.
完整的代码重现如下.输入的URL位于https://gist.github.com/bsolomon1124/fc625b624dd26ad9b5c39ccb9e230f5a.
import asyncio
import itertools
import aiohttp
import aiohttp.client_exceptions
from yarl import URL
ua = itertools.cycle(
(
"Mozilla/5.0 (X11; Linux i686; rv:64.0) Gecko/20100101 Firefox/64.0",
"Mozilla/5.0 (Macintosh; U; Intel …Run Code Online (Sandbox Code Playgroud) 我尝试根据此处的答案将 GridSearchCV 用于多类案例:
但我得到了价值错误, multiclass format is not supported.
如何将这种方法用于多类案例?
以下代码来自上述链接中的答案。
import numpy as np
from sklearn.datasets import make_classification
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.pipeline import make_pipeline
from sklearn.grid_search import GridSearchCV
from sklearn.metrics import accuracy_score, recall_score, f1_score, roc_auc_score, make_scorer
X, y = make_classification(n_samples=3000, n_features=5, weights=[0.1, 0.9, 0.3])
pipe = make_pipeline(StandardScaler(), SVC(kernel='rbf', class_weight='auto'))
param_space = dict(svc__C=np.logspace(-5,0,5), svc__gamma=np.logspace(-2, 2, 10))
accuracy_score, recall_score, roc_auc_score
my_scorer = make_scorer(roc_auc_score, greater_is_better=True)
gscv = GridSearchCV(pipe, param_space, scoring=my_scorer)
gscv.fit(X, y)
print gscv.best_params_
Run Code Online (Sandbox Code Playgroud) pool = redis.ConnectionPool(host='10.0.0.1', port=6379, db=0)
r = redis.Redis(connection_pool=pool)
Run Code Online (Sandbox Code Playgroud)
与
r = redis.Redis(host='10.0.0.1', port=6379, db=0)
Run Code Online (Sandbox Code Playgroud)
这两个工作正常.
什么是使用连接池背后的想法?你什么时候用它?
我想为线性模型计算AIC以比较它们的复杂性.我做了如下:
regr = linear_model.LinearRegression()
regr.fit(X, y)
aic_intercept_slope = aic(y, regr.coef_[0] * X.as_matrix() + regr.intercept_, k=1)
def aic(y, y_pred, k):
resid = y - y_pred.ravel()
sse = sum(resid ** 2)
AIC = 2*k - 2*np.log(sse)
return AIC
Run Code Online (Sandbox Code Playgroud)
但是我收到一个divide by zero encountered in log错误.
给出一个清单:
import string
a = list(string.ascii_lowercase)
Run Code Online (Sandbox Code Playgroud)
什么是返回m个元素的每第n个块的Pythonic方法?请注意,这与仅返回每个第n个元素不同.
获得3个元素的3个块中的每一个的所需结果(取3,跳过6,取3,跳过6 ......):
['a', 'b', 'c', 'j', 'k', 'l', 's', 't', 'u']
Run Code Online (Sandbox Code Playgroud)
我可以这样做:
import itertools
s1 = a[::9]
s2 = a[1::9]
s3 = a[2::9]
res = list(itertools.chain.from_iterable(zip(s1,s2, s3)))
Run Code Online (Sandbox Code Playgroud)
有更干净的方式吗?
假设Pandas数据框如下所示:
X_test.head(4)
BoxRatio Thrust Velocity OnBalRun vwapGain
5 -0.163 -0.817 0.741 1.702 0.218
8 0.000 0.000 0.732 1.798 0.307
11 0.417 -0.298 2.036 4.107 1.793
13 0.054 -0.574 1.323 2.553 1.185
Run Code Online (Sandbox Code Playgroud)
如何将第三行(作为row3)提取为pd数据框?换句话说,row3.shape应该是(1,5)而row3.head()应该是:
0.417 -0.298 2.036 4.107 1.793
Run Code Online (Sandbox Code Playgroud) 所以我正在创建一个程序来显示数字系统,但是我在第一个障碍时遇到了问题.该程序将从用户那里获取一个数字,然后在整个程序中使用该数字,以便解释几个计算机科学概念.
在解释我的第一部分编号系统时,程序会说出它是什么类型的编号.我这样做是通过将字符串转换为浮点数来实现的.如果浮点数后面只有".0",那么它将它转换为整数.
目前我正在使用此代码
while CorrectNumber == False:
try:
Number = float(NumberString) - 0
print (Number)
except:
print ("Error! Not a number!")
Run Code Online (Sandbox Code Playgroud)
这很有用,因为它显示用户是否输入了数字.但是,我不确定如何检查小数位后的值,以检查是否应将其转换为整数.有小费吗?
我目前正在Python中生成UUID,如下所示:
import uuid
import secrets
uuid.UUID(bytes=secrets.token_bytes(16))
Run Code Online (Sandbox Code Playgroud)
这可以安全地用作API令牌或访问令牌吗?
大熊猫TimedeltaIndex具有days可用于与其他普通dtypes(float64等)进行操作的属性:
import pandas as pd
from pandas.tseries import offsets
idx1 = pd.date_range('2017-01', periods=10)
idx2 = idx1 + offsets.MonthEnd(1)
tds = idx2 - idx1
print(tds.days - 2)
Int64Index([28, 27, 26, 25, 24, 23, 22, 21, 20, 19], dtype='int64')
Run Code Online (Sandbox Code Playgroud)
但是,当tds转换为Series(显式或作为DataFrame列)时,它将失去此属性。
print(pd.Series(tds).days)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-115-cb20b4d368f4> in <module>()
----> 1 print(pd.Series(tds).days)
C:\Users\bsolomon\Anaconda3\lib\site-packages\pandas\core\generic.py in __getattr__(self, name)
3079 if name in self._info_axis:
3080 return self[name]
-> 3081 return object.__getattribute__(self, name)
3082
3083 def …Run Code Online (Sandbox Code Playgroud) python ×10
python-3.x ×6
pandas ×2
aiohttp ×1
async-await ×1
redis ×1
scikit-learn ×1
secret-key ×1
timedelta ×1