小编Gra*_*ntJ的帖子

如何绑定和发送Google Cloud Forwarding规则IP地址?

我已按照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

11
推荐指数
1
解决办法
1727
查看次数

如何在 Python 线程中中止/取消 HTTP 请求?

我正在寻找中止/取消 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)

python sockets multithreading http

11
推荐指数
1
解决办法
644
查看次数

django的runserver选项是否提供了运行其他重启脚本的钩子?

我最近一直在玩django和芹菜.开发过程中一件烦人的事情就是我每次修改任务时都必须重启celery守护进程.当我正在开发时,我通常喜欢使用'manage.py runserver',它会在修改我的应用程序时自动重新加载django框架.

有没有办法在runserver执行的重新加载过程中添加一个钩子,以便它自动重启我运行的celery守护进程?

或者,芹菜是否有类似的监视和重载加载模式,我应该用于开发?

django celery django-celery

7
推荐指数
1
解决办法
2643
查看次数

使用istream_iterator并从标准输入或文件中读取

我正在使用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初始化我的输入流迭代器并继续我的快乐方式?

c++ stdin file istream-iterator

6
推荐指数
1
解决办法
2万
查看次数