小编Ami*_*old的帖子

Python套接字没有真正关闭

我的 main 函数中有以下代码:

def main():
    server = socket.socket();
    server.bind((address, port))
    server.listen(1)

    sock, addr = server.accept()
    try:
        while True:
            message = sock.recv(buffer_size)
            # Do some stuff...
            sock.send(answer)
    except KeyboardInterrupt:
        pass
    finally:
        sock.close()
        server.close()
Run Code Online (Sandbox Code Playgroud)

该程序运行得非常好,一切都很完美,直到我决定结束它。

Ctrl-C我使用(或^C)结束我的程序。异常KeyboardInterrupt得到正确处理并且到达了finally块,但是由于某种原因,当我再次运行程序时,我得到了OSError有关端口正在使用的信息,并且我必须等待大约1分钟,直到套接字关闭才可以重新运行代码。如果这很重要的话,我使用的是Linux。

我在这里缺少什么?为什么套接字没有正确关闭?

编辑:这不是如何关闭被杀死的程序打开的套接字的重复项?因为在我的例子中,套接字被优雅地关闭,而不是那个问题。

python sockets linux python-3.x

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

Python itertools产品从某些开始

我有一个非常大的产品,期望来自itertools.product.

for result in product(items, repeat=9):
    # stuff
Run Code Online (Sandbox Code Playgroud)

这需要花费很多时间,我正在寻找从某个项目开始的方法,因为我无法一次性完成.

我可以做以下事情:

gen = product(items, repeat=9):
for temp in gen:
    if temp == DESIRED_VALUE:
        break
for result in gen:
    # stuff
Run Code Online (Sandbox Code Playgroud)

但这需要花费很多时间,就像我刚刚重启程序一样.那么,有没有办法"跳过去"而不浪费时间迭代整个事情?

python-itertools python-3.x

-1
推荐指数
1
解决办法
561
查看次数

C malloc和免费

我被教导如果你做malloc(),但你没有free(),内存将一直保持到重新启动.好吧,我当然测试了它.一个非常简单的代码:

#include <stdlib.h>

int main(void)
{
    while (1) malloc(1000);
}
Run Code Online (Sandbox Code Playgroud)

我在任务管理器(Windows 8.1)中查看了它.

嗯,该程序真的很快就占用了2037.4 MB而且就这样.我知道它可能是Windows限制程序.

但这是奇怪的部分:当我关闭控制台时,内存使用百分比下降,即使我被教导它不应该!

免费呼叫是多余的,因为操作系统无论如何都要释放它?

(这里的问题是相关的,但不能完全回答我是否应该自由.)

c malloc free memory-management

-2
推荐指数
1
解决办法
272
查看次数