我在boot2docker 1.3.1下运行.
我有一个运行Web服务器的Docker容器uwsgi --http :8080.
如果我附加到容器,我可以使用浏览网站,lynx http://127.0.0.1:8080所以我知道服务器正在运行.
我运行我的容器:
$ docker run -itP --expose 8080 uwsgi_app:0.2
Run Code Online (Sandbox Code Playgroud)
它有以下细节:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5248ad86596d uwsgi_app:0.2 "bash" 11 minutes ago Up 11 minutes 0.0.0.0:49159->8080/tcp cocky_hypatia
$ docker inspect --format '{{ .NetworkSettings.IPAddress }}' 5248ad86596d
172.17.0.107
Run Code Online (Sandbox Code Playgroud)
我以为我可以通过访问来自我的主机访问该网站http://172.17.0.107:49159.
这不起作用.我只是在Chrome中看到"连接......",无处可去.
我究竟做错了什么?
首先,我知道一些措辞相似的问题,例如:
其中没有一个(AFAICT)的答案与我的问题版本相符.
我的情况是:
$ git status
# On branch stable
nothing to commit (working directory clean)
$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 857 commits.
Run Code Online (Sandbox Code Playgroud)
在现有的问题中,接受和赞成的答案大多同意它意味着字面上的意思......我领先,我需要将我的新提交推送到origin/master.
我知道实际情况恰恰相反,我的本地master分支是在远程origin/master控制器后面,实际上我需要git pull origin master在本地做一些工作之前.(或者可能只是git fetch origin?)
我的问题是......是否有一些理由说明这些信息的措辞Your branch is ahead of 'origin/master' by 857 commits.是否真的有意义?
因为我现在理解它的方式与消息所说的相反('我的分支' 在原点/主人之后).
或者它的确意味着:"远程主分支的HEAD领先于您的本地原点/主跟踪分支"?
更新 FWIW我在一个由六个其他开发人员组成的团队中工作.我们每天都会多次拉,提,推等等没有问题.我这里没有错误...我只是想了解为什么Git用这种方式说出它的信息 - 措辞本身是否被错误选择,或者是否有一些Git的基本概念导致他们这样说出来而且我不理解.
这里有更多信息 …
我通过 pyenv 安装了 3.8.2,但我想在本地机器上升级到 3.8.3,以匹配我们在生产中使用的版本。
$ ? pyenv install 3.8.3
python-build: definition not found: 3.8.3
The following versions contain `3.8.3' in the name:
miniconda-3.8.3
miniconda3-3.8.3
See all available versions with `pyenv install --list'.
If the version you need is missing, try upgrading pyenv:
brew update && brew upgrade pyenv
Run Code Online (Sandbox Code Playgroud)
好吧,让我们试试看...
$ ? brew update && brew upgrade pyenv
Updating Homebrew...
Warning: pyenv 1.2.18 already installed
Run Code Online (Sandbox Code Playgroud)
我不清楚从哪里提供 pyenv 安装的 Python 版本。我已经安装了 3.8.3:
$ ? brew info python@3.8
python@3.8: stable 3.8.3 (bottled) …Run Code Online (Sandbox Code Playgroud) 我最近一直在和Celery合作,我不喜欢它.它的配置很混乱,过于复杂且记录不完整.
我想用Celery从单个生产者向多个消费者发送广播消息.令我困惑的是Celery术语与底层传输RabbitMQ的术语之间的差异.
在RabbitMQ中,您可以使用单个扇出Exchange和多个队列来广播消息:

但是在Celery中,术语都搞砸了:在这里你可以有一个广播队列,它向多个消费者发送消息:

我甚至不了解,Celery广播队列应该如何工作,导致具有多个消费者的RabbitMQ队列用于负载平衡.因此,在RabbitMQ中,如果多个消费者(即消费者池)连接到同一队列,则只有一个消费者将接收和处理消息,这在RabbitMQ文档中称为循环.
此外,关于广播的Celery文档确实不够.我应该为广播队列指定什么类型的RabbitMQ交换,扇出与否?你能提供一个完整的例子吗?
所以,我要求的是(1)澄清Celery中广播队列的概念和实现,以及(2)广播队列配置的完整示例.谢谢.
https://www.aeracode.org/2018/02/19/python-async-simplified/
如果您调用非阻塞同步函数,则不会破坏您的一天,如下所示:
def get_chat_id(name):
return "chat-%s" % name
async def main():
result = get_chat_id("django")
Run Code Online (Sandbox Code Playgroud)
但是,如果您调用阻塞函数(例如 Django ORM),则异步函数内的代码看起来是相同的,但现在它是危险的代码,可能会阻塞整个事件循环,因为它不等待:
def get_chat_id(name):
return Chat.objects.get(name=name).id
async def main():
result = get_chat_id("django")
Run Code Online (Sandbox Code Playgroud)
您可以看到,如果程序员没有超级了解调用它的所有内容,那么很容易让一个非阻塞函数“意外地”变成阻塞。这就是为什么我建议您在没有安全执行或事先不知道它是非阻塞标准库函数(例如
os.path.join.
所以我正在寻找一种方法来自动捕获此错误的实例。Python 是否有任何 linter 会将异步函数内的同步函数调用报告为违规?
我可以配置 Pylint 或 Flake8 来执行此操作吗?
我不一定介意它是否也捕获了上面的第一种情况(这是无害的)。
更新:
在某种程度上,我意识到这是一个愚蠢的问题,正如米哈伊尔的回答所指出的那样。我们需要的是 linter 应该检测到的“危险同步函数”的定义。
因此,出于这个问题的目的,我给出以下定义:
“危险同步函数”是执行 IO 操作的函数。例如,这些操作必须由 gevent 进行猴子修补,或者必须包装在async函数中,以便事件循环可以进行上下文切换。
(我欢迎对这个定义的任何改进)
我有一个 OCaml 项目使用dune
按照基本教程中的建议,我有一个目录结构,例如:
bin/
cli.ml
dune
lib/
dune
...
<various>.ml
Run Code Online (Sandbox Code Playgroud)
我的目录中的文件数量lib不断增加,我希望有另一个级别的命名空间。
我想要子目录,例如:
lib/
utils/
dune
...
<various>.ml
some_other_domain/
dune
...
<various>.ml
dune
...
<various>.ml
Run Code Online (Sandbox Code Playgroud)
我希望能够像这样打开它们Lib.Utils.Whatever
我想这一定是可能的吗?
我尝试dune在下面创建一个文件lib/utils:
bin/
cli.ml
dune
lib/
dune
...
<various>.ml
Run Code Online (Sandbox Code Playgroud)
...但open Lib.Utils.Whatever似乎不起作用。
我找到了该subdir节...但是如果我将其添加到lib/dune并定义utils为子目录library,那么我就不会得到命名空间...我必须open Utils这样做而不是open Lib.Utils
我正在试图为GeoDjango安装Spatialite!
我已经在使用Homebrew了,它通常很简单方便,所以我最初尝试按照Homebrew的说明操作 GeoDjango.
但这不会安装任何数据库,即Spatialite.下一步是尝试安装Spatialite本身,但Django docs没有提供特定于Homebrew的指令.
我发现这个教程看起来很完美 - 一个Homebrew和virtualenv友好的Spatialite for GeoDjango安装.
但它不起作用......似乎我pysqlite与OS X附带的非空间启用的SQLite版本相关联,而不是我从Homebrew安装的Spatial-ised版本,我在Django尝试时遇到此错误连接到db:
"pysqlite库不支持C扩展加载.必须配置SQLite和pysqlite以允许加载扩展以使用SpatiaLite."
pysqlite的作者没有回应我在Github上寻求帮助的请求,我没有通过谷歌找到任何东西.
所以我回到绘图板并决定遵循GeoDjango文档中的"Mac OS X特定指令" ......通过安装KyngChaos二进制包中的各种地理库.
该文件说"在他们上面列出的顺序安装软件包",但我发现我不能安装UnixImageIO,而无需安装PROJ第一.下载Spatialite二进制文件(http://www.gaia-gis.it/spatialite-2.3.1/binaries.html)的文档中的链接已中断,因此我使用了来自KyngChaos的"Spatialite Tools v4.1".
继续下一步,我收到此错误:
$ spatialite geodjango.db "SELECT InitSpatialMetaData();"
SQLite header and source version mismatch
2013-10-17 12:57:35 c78be6d786c19073b3a6730dfe3fb1be54f5657a
2013-09-03 17:11:13 7dd4968f235d6e1ca9547cda9cf3bd570e1609ef
Run Code Online (Sandbox Code Playgroud)
在这一点上不确定是什么问题.
SO上有其他人已经走过了KyngChaos路线并且最终得到了相同的"两个SQLite和pysqlite必须配置为允许加载扩展"错误我从Homebrew路线得到了无论如何.
我发现这张票#17756用于添加pyspatialite对Django的支持 - pyspatialite应该是一种更简单的方式来处理pip install所有事情但不幸的是它也不起作用(请参阅对票底的评论).
我有点不愿意开始尝试从源头开始构建所有内容,因为我似乎可能会再次遇到同样的问题,但花费数小时谷歌搜索有关神秘的编译器错误,魔术标志和路径等的信息.
我准备放弃,只使用Postgres/PostGIS.
http://docs.python.org/2/library/random.html#random.shuffle
random.shuffle(x[, random])将序列x随机移动到位.可选参数random是一个0参数函数,在[0.0,1.0)中返回随机浮点数; 默认情况下,这是函数
random().注意,即使相当小
len(x),x的排列总数也大于大多数随机数生成器的周期; 这意味着永远不会产生长序列的大多数排列.
有人可以向我解释最后一句话的含义吗?
听起来你可以或应该使用的列表大小是否有限制shuffle?
这是我的代码,去掉了无关的东西:
协调器.py
context = zmq.Context()
socket = context.socket(zmq.ROUTER)
port = socket.bind_to_random_port(ZMQ_ADDRESS)
poller = zmq.Poller()
poller.register(socket, zmq.POLLIN)
while True:
event = poller.poll(1)
if not event:
continue
process_id, val = socket.recv_json()
Run Code Online (Sandbox Code Playgroud)
工人.py
context = zmq.Context()
socket = context.socket(zmq.DEALER)
socket.connect('%s:%s' % (ZMQ_ADDRESS, kwargs['zmq_port']))
socket.send_json(
(os.getpid(), True)
)
Run Code Online (Sandbox Code Playgroud)
当我运行它时会发生什么:
process_id, val = socket.recv_json()
File "/Users/anentropic/.virtualenvs/myproj/lib/python2.7/site-packages/zmq/sugar/socket.py", line 380, in recv_json
return jsonapi.loads(msg)
File "/Users/anentropic/.virtualenvs/myproj/lib/python2.7/site-packages/zmq/utils/jsonapi.py", line 71, in loads
return jsonmod.loads(s, **kwargs)
File "/Users/anentropic/.virtualenvs/myproj/lib/python2.7/site-packages/simplejson/__init__.py", line 451, in loads
return _default_decoder.decode(s)
File "/Users/anentropic/.virtualenvs/myproj/lib/python2.7/site-packages/simplejson/decoder.py", line 406, in decode …Run Code Online (Sandbox Code Playgroud) 我已经定义了以下索引:
CREATE INDEX
users_search_idx
ON
auth_user
USING
gin(
username gin_trgm_ops,
first_name gin_trgm_ops,
last_name gin_trgm_ops
);
Run Code Online (Sandbox Code Playgroud)
我正在执行以下查询:
PREPARE user_search (TEXT, INT) AS
SELECT
username,
email,
first_name,
last_name,
( -- would probably do per-field weightings here
s_username + s_first_name + s_last_name
) rank
FROM
auth_user,
similarity(username, $1) s_username,
similarity(first_name, $1) s_first_name,
similarity(last_name, $1) s_last_name
WHERE
username % $1 OR
first_name % $1 OR
last_name % $1
ORDER BY
rank DESC
LIMIT $2;
Run Code Online (Sandbox Code Playgroud)
该auth_user表有620万行.
查询的速度似乎在很大程度上取决于查询可能返回的结果数similarity.
通过增加相似性阈值有set_limit帮助,但通过消除部分匹配来降低结果的有用性.
有些搜索在200ms内返回,其他搜索需要大约10秒. …
boot2docker ×1
celery ×1
django ×1
docker ×1
flake8 ×1
geodjango ×1
git ×1
ocaml ×1
ocaml-dune ×1
pg-trgm ×1
postgresql ×1
pyenv ×1
pylint ×1
pysqlite ×1
python ×1
python-3.x ×1
pyzmq ×1
rabbitmq ×1
random ×1
similarity ×1
spatialite ×1
sqlite ×1
trigram ×1
zeromq ×1