等待上传中...
2019年02月12日 11点07分 留白

Python网络编程中使用协程的问题

我写了一个socket服务器,使用了协程进行驱动,可以进行连接但是出现了bug,启动之后如果使用谷歌浏览器进行访问如果一段时间不刷新或者不用新的页面访问就会报错

Traceback (most recent call last):
  File "E:/git/web-socket/DAWN/IOloop.py", line 126, in <module>
    event.run_forever()
  File "E:/git/web-socket/DAWN/IOloop.py", line 49, in run_forever
    events = self.selector.select()
  File "C:\Users\lenovo\Desktop\work\python3\Python\Python36\lib\selectors.py", line 323, in select
    r, w, _ = self._select(self._readers, self._writers, [], timeout)
  File "C:\Users\lenovo\Desktop\work\python3\Python\Python36\lib\selectors.py", line 314, in _select
    r, w, x = select.select(r, w, w, timeout)
OSError: [WinError 10038] 在一个非套接字上尝试了一个操作。



但是我写了一个client访问服务器绑定的端口的时候就不会出现这种bug,我是在Python3.6的版本,win10 pycharm上运行的

下面是我的代码


import socket
import selectors


class Future():
    def __init__(self):
        self.result = None
        self._callback = []

    def add_done_callback(self, fn):
        self._callback.append(fn)

    def set_result(self, result):
        self.result = result
        for callback in self._callback:
            callback()

    def __iter__(self):
        yield self
        return self.result

class Task():
    def __init__(self, coro):
        self.coro = coro
        # f = Future()
        # f.set_result(None)
        self.step()

    def step(self):
        try:
            next_future = self.coro.send(None)
        except StopIteration:
            return
        if len(next_future._callback) <= 0:
            next_future.add_done_callback(self.step)


class IOLoop():
    def __init__(self, selector=None):
        if selector is None:
            selector = selectors.DefaultSelector()
        self.selector = selector

    def create_task(self, coro):
        return Task(coro)

    def run_forever(self):
        while True:
            events = self.selector.select()
            for key, mask in events:
                callback = key.data
                callback()


class TCPServer():
    def __init__(self, host, port, loop):
        self.host = host
        self.port = port
        self._loop = loop
        self.sock = socket.socket()

    def run(self):
        self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        self.sock.bind((self.host, self.port))
        self.sock.listen(128)
        self.sock.setblocking(False)

        while 1:
            conn, addr = yield from self._accept()
            print('conn ', conn, 'addr ', addr)
            data = yield from self._read(conn)
            print('data', data)
            if data:
                yield from self.sendall(conn, data)
            else:
                conn.close()

    def _accept(self):
        f = Future()

        def on_accept():
            conn, addr = self.sock.accept()
            print('accepted', conn, 'from', addr)
            conn.setblocking(False)
            f.set_result((conn, addr))
        self._loop.selector.register(self.sock, selectors.EVENT_READ, on_accept)
        conn, addr = yield from f
        self._loop.selector.unregister(self.sock)
        return conn, addr

    def _read(self, conn):
        f = Future()

        def read():
            data = b''
            while True:
                sock_data = conn.recv(1024)
                data += sock_data
                if len(sock_data) < 1024:
                    break
            f.set_result((data))
        self._loop.selector.register(conn, selectors.EVENT_READ, read)
        data = yield from f
        return data

    def sendall(self, conn, data):
        f = Future()

        def write():
            conn.sendall(data)
            conn.close()
            print('closing', conn)
            f.set_result(None)
        self._loop.selector.modify(conn, selectors.EVENT_WRITE, write)
        yield from f
        self._loop.selector.unregister(conn)


event = IOLoop()
TCP = TCPServer('localhost', 2000, event)
task = Task(TCP.run())
event.run_forever()

修改

Python 编程开发语言


等待上传中...
2019年02月13日 09点00分 梅花开

如何启动一个项目

这边有完整的文档如下:

1、 导入数据库初始文件。启动MySql,执行脚本文件cis.sql,执行成功后会在mysql中创建cis数据库,并且有相关表数据。

2、 将ROOT和index_module放至Tomcat的webapps目录(可先删除该目录下的原ROOT目录)。

3、 进入到ROOT\WEB-INF目录下,修改applicationContext.xml文件,将其中数据库连接修改成实际的连接:

 

修改数据库名称为cis,user和password修改成实际值。

4、 修改tomcat的内存:

在catalina.sh文件最前面加入如下语句,这个文件在tomcat -->bin目录下。

JAVA_OPTS='-Xms1024m -Xmx1024m -XX:PermSize=256M -XX:MaxNewSize=512m -XX:MaxPermSize=512m'

5、 修改tomcat编码:

在tomcat/conf/server.xml文件中增加URIEncoding="UTF-8",增加位置在tomcat端口对应的标签中:

 

6、 启动tomcat,如能成功启动,则访问http://IP:PORT/admin(IP和PORT对应TOMCAT所在机器IP和TOMCAT端口)。如果页面可以正常打开,表示安装成功,输入账号admin,密码123456进入管理后台。

7、 修改索引存放位置:

进入管理后台,点击“系统管理”,在页面左侧选择菜单“存放位置”, 将索引存放位置修改成实际地址。

Ps:安装过程中如遇到问题,请复制错误提示,以方便问题定位。


tomcat已经正常启动 并且登陆后台系统了 但是登陆进去之后不能操作 控制台报错

这个时候应该怎么办。。

修改

编程开发语言 JAVA 项目启动 tomcat


等待上传中...
2019年02月12日 15点52分 梅花开

tomcat启动问题(mac)

当我使用tomcat启动一个项目之后关闭

再启动自己的另外一个tomcat

这个tomcat去访问了上一个项目的启动地址

所有的tomcat进程关闭之后启动自己的tomcat访问的还是这个地址 

这是什么原因导致的

修改

tomcat 工具软件


等待上传中...
2019年01月04日 00点01分 口十飞

这个改写什么是返回String的值啊还有写什么返回double值呢

修改

JAVA 编程开发语言


等待上传中...
2019年02月11日 22点09分 big_lll

vs2017没有EF数据模型

vs2017想试试EF,使用的是.net core2.0,但是新建项里没有数据模型。c盘的Package Cache文件夹也搜EFTools文件夹怎么办?

我试过在.net framework里是可以新建数据模型的,但是在.net core里不可以,是因为.net core不支持EF嘛。

我在网上找了个学习 core的教程,他用的是EF,是怎么实现的呢

修改

C# 编程开发语言


等待上传中...
2019年01月30日 12点27分 28zhu

求一个实现暂停、停止、恢复的功能的思路

问题:-----------------------------------------------

RT。

    其实就跟那视频播放一样的功能,我的想法是有两个线程,A线程是控制者,B线程是做任务的,B中的任务一般是周期性的,有循环的长时间的任务。现在的目标是由A来控制B。

    我没有啥具体的好想法。


我已经做了什么:-----------------------------------------------

    从网上查了,都是对线程的Thead.Abort,Resume等,除了这个有没有好的办法呢,另外这种方式感觉不可控,原理不是特别明白,所以不使用这种方式。

修改

JAVA C# 编程开发语言


等待上传中...
2019年01月22日 09点23分 28zhu

局域网中的电脑突然不能远程桌面了

情况是这样的:

有电脑A,B,C。IP如下,

A:192.168.0.121

B:192.168.0.10

C:192.168.0.20

本来是可以互相远程桌面的。结果有一天A能远程C,不能远程B了,但是C能远程B,即,

A-->B  这个不行了

A-->C

C-->B。

我忘记我对电脑做了什么了,就出现了这样的结果。

我做了如下努力:

1、从网找方法,各种尝试,包括添加凭证什么的。

2、问身边其他人。

结果都不行。


请大神帮助。

修改

远程桌面 Windows 操作系统


等待上传中...
2018年12月16日 12点22分 浅色决

Python装饰器怎么理解

Python装饰器怎么理解?Python装饰器怎么理解?有没有形象具体的方式 修改

Python 编程开发语言


等待上传中...
2019年01月23日 22点25分 niunan

thinkphp5运行

 
有人会THINKPHP吗?
 
初学,为什么我在app\index\controller\index.php里加上
public function test()
{
return '<h1>hello niunan...</h1>';

}


然后运行 http://localhost:10003/public/index.php/index/test 报错呢?

 


运行默认的http://localhost:10003/public/index.php/index/index 是能正常显示。。

修改

PHP 编程开发语言


等待上传中...
2019年01月16日 16点56分 28zhu

c#监控本进程退出

我已经做了哪些努力:

    已经使用下面的方法,但是都不起作用。

Process.GetCurrentProcess().Exited += Program_Exited;
            AppDomain.CurrentDomain.ProcessExit += new EventHandler(CurrentDomain_ProcessExit);
            if (AppDomain.CurrentDomain.IsDefaultAppDomain())
                AppDomain.CurrentDomain.ProcessExit += MyTerminationHandler;
            else
                AppDomain.CurrentDomain.DomainUnload += MyTerminationHandler;
            AppDomain.CurrentDomain.DomainUnload +=
                (object sender, EventArgs e) =>
                {
                    Process.Start("cmd.exe");
                    throw new Exception("45456");
                    log4net.LogManager.GetLogger("FormatFileName").Debug("应用程序域卸载");
                };

修改

监控 事件 C#



帮助

反馈