我已按照Google云端平台上的使用协议转发的说明进行操作.所以我现在有这样的事情:
$ gcloud compute forwarding-rules list
NAME REGION IP_ADDRESS IP_PROTOCOL TARGET
x-fr-1 us-west1 104.198.?.?? TCP us-west1-a/targetInstances/x-target-instance
x-fr-2 us-west1 104.198.?.?? TCP us-west1-a/targetInstances/x-target-instance
x-fr-3 us-west1 104.198.??.??? TCP us-west1-a/targetInstances/x-target-instance
x-fr-4 us-west1 104.198.??.??? TCP us-west1-a/targetInstances/x-target-instance
x-fr-5 us-west1 104.198.?.??? TCP us-west1-a/targetInstances/x-target-instance
Run Code Online (Sandbox Code Playgroud)
(注意:名称已被更改,问号已被替换.我不确定保持这些私密但更安全而不是遗憾.)
我的实例"x"在"x-target-instance"中,并且具有五个转发规则"x-fr-1"到"x-fr-5".我在"x"上运行nginx,我可以从它的6个外部IP地址中的任何一个访问它(1个用于实例+ 5个转发规则).到现在为止还挺好.
我现在感兴趣的是将服务器绑定到这些外部IP地址.为了探索,我尝试使用Python:
import socket
import time
def serve(ip_address, port=80):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind((ip_address, port))
try:
sock.listen(5)
while True:
con, _ = sock.accept()
print con.getpeername(), con.getsockname()
con.send(time.ctime())
con.close()
finally:
sock.close()
Run Code Online (Sandbox Code Playgroud)
现在我可以绑定"0.0.0.0",我得到一些有趣的结果:
>>> serve("0.0.0.0")
('173.228.???.??', 57288) ('10.240.?.?', 80)
('173.228.???.??', 57286) ('104.198.?.??', …
Run Code Online (Sandbox Code Playgroud) python networking google-compute-engine google-cloud-platform
我正在寻找中止/取消 Python 线程中的 HTTP 请求。我必须坚持使用线程。我不能使用 asyncio 或标准库之外的任何东西。
此代码适用于套接字:
"""Demo for Canceling IO by Closing the Socket
Works!
"""
import socket
import time
from concurrent import futures
start_time = time.time()
sock = socket.socket()
def read():
"Read data with 10 second delay."
sock.connect(('httpbin.org', 80))
sock.sendall(b'GET /delay/10 HTTP/1.0\r\n\r\n')
while True:
data = sock.recv(1024)
if not data:
break
print(data.decode(), end='')
with futures.ThreadPoolExecutor() as pool:
future = pool.submit(read)
futures.wait([future], timeout=5)
sock.close() # <-- Interrupt sock.recv(1024) in Thread:read().
end_time = time.time()
print(f'Duration: {end_time - start_time:.3f}')
# …
Run Code Online (Sandbox Code Playgroud) 我最近一直在玩django和芹菜.开发过程中一件烦人的事情就是我每次修改任务时都必须重启celery守护进程.当我正在开发时,我通常喜欢使用'manage.py runserver',它会在修改我的应用程序时自动重新加载django框架.
有没有办法在runserver执行的重新加载过程中添加一个钩子,以便它自动重启我运行的celery守护进程?
或者,芹菜是否有类似的监视和重载加载模式,我应该用于开发?
我正在使用Microsoft Visual C++编写,我希望我的程序可以使用标准输入或文件读取istream_iterator
.谷歌搜索互联网并没有表明我认为它必须是多么简单.例如,我可以很容易地编写这个并从标准输入中读取:
#include <iostream>
#include <string>
#include <iterator>
using namespace std;
int main()
{
istream_iterator<string> my_it(cin);
for (; my_it != istream_iterator<string>(); my_it++)
printf("%s\n", (*my_it).c_str());
}
Run Code Online (Sandbox Code Playgroud)
或者我可以写这个并从文件中读取:
#include <iostream>
#include <string>
#include <iterator>
#include <fstream>
using namespace std;
int main(int argc, char** argv)
{
ifstream file(argv[1]);
istream_iterator<string> my_it(file);
for (; my_it != istream_iterator<string>(); my_it++)
printf("%s\n", (*my_it).c_str());
}
Run Code Online (Sandbox Code Playgroud)
但是我如何将这两者结合起来以便简单的(argc == 2)
检查让我用文件流或stdin初始化我的输入流迭代器并继续我的快乐方式?