greenio: processes: None >= 0 TypeError
https://github.com/eventlet/eventlet/issues/107
This commit is contained in:
@@ -382,32 +382,29 @@ class _SocketDuckForFd(object):
|
||||
buf[:nbytes] = data
|
||||
return len(data)
|
||||
|
||||
@staticmethod
|
||||
def _try_send(fd, data, sent=0, write=os.write):
|
||||
try:
|
||||
sent = write(fd, data)
|
||||
except OSError as e:
|
||||
if get_errno(e) not in SOCKET_BLOCKING:
|
||||
raise IOError(*e.args)
|
||||
return sent
|
||||
|
||||
def send(self, data):
|
||||
while True:
|
||||
try:
|
||||
os.write(self._fileno, data)
|
||||
except OSError as e:
|
||||
if get_errno(e) not in SOCKET_BLOCKING:
|
||||
raise IOError(*e.args)
|
||||
sent = self._try_send(self._fileno, data)
|
||||
if sent == 0:
|
||||
trampoline(self, write=True)
|
||||
sent = self._try_send(self._fileno, data)
|
||||
return sent
|
||||
|
||||
def sendall(self, data):
|
||||
len_data = len(data)
|
||||
os_write = os.write
|
||||
fileno = self._fileno
|
||||
try:
|
||||
total_sent = os_write(fileno, data)
|
||||
except OSError as e:
|
||||
if get_errno(e) != errno.EAGAIN:
|
||||
raise IOError(*e.args)
|
||||
total_sent = 0
|
||||
total_sent = self._try_send(fileno, data)
|
||||
while total_sent < len_data:
|
||||
trampoline(self, write=True)
|
||||
try:
|
||||
total_sent += os_write(fileno, data[total_sent:])
|
||||
except OSError as e:
|
||||
if get_errno(e) != errno. EAGAIN:
|
||||
raise IOError(*e.args)
|
||||
total_sent += self._try_send(fileno, data[total_sent:])
|
||||
|
||||
def __del__(self):
|
||||
self._close()
|
||||
|
||||
@@ -9,7 +9,7 @@ import os
|
||||
import signal
|
||||
|
||||
import eventlet
|
||||
from eventlet import greenio, pools
|
||||
from eventlet import pools
|
||||
from eventlet.green import subprocess
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ def cooperative_wait(pobj, check_interval=0.01):
|
||||
try:
|
||||
while True:
|
||||
status = pobj.poll()
|
||||
if status >= 0:
|
||||
if status is not None:
|
||||
return status
|
||||
eventlet.sleep(check_interval)
|
||||
except OSError as e:
|
||||
@@ -96,7 +96,7 @@ class Process(object):
|
||||
return self.child_stdin
|
||||
raise RuntimeError("Unknown mode", mode)
|
||||
|
||||
def read(self, amount=None):
|
||||
def read(self, amount=-1):
|
||||
"""Reads from the stdout and stderr of the child process.
|
||||
The first call to read() will return a string; subsequent
|
||||
calls may raise a DeadProcess when EOF occurs on the pipe.
|
||||
|
||||
@@ -1,11 +1,14 @@
|
||||
import sys
|
||||
import warnings
|
||||
from tests import LimitedTestCase, main, skip_on_windows
|
||||
|
||||
import eventlet
|
||||
|
||||
warnings.simplefilter('ignore', DeprecationWarning)
|
||||
from eventlet import processes, api
|
||||
from eventlet import processes
|
||||
warnings.simplefilter('default', DeprecationWarning)
|
||||
|
||||
from tests import LimitedTestCase, main, skip_on_windows
|
||||
|
||||
|
||||
class TestEchoPool(LimitedTestCase):
|
||||
def setUp(self):
|
||||
super(TestEchoPool, self).setUp()
|
||||
@@ -20,7 +23,7 @@ class TestEchoPool(LimitedTestCase):
|
||||
result = proc.read()
|
||||
finally:
|
||||
self.pool.put(proc)
|
||||
self.assertEqual(result, 'hello\n')
|
||||
self.assertEqual(result, b'hello\n')
|
||||
|
||||
@skip_on_windows
|
||||
def test_read_eof(self):
|
||||
@@ -34,14 +37,14 @@ class TestEchoPool(LimitedTestCase):
|
||||
@skip_on_windows
|
||||
def test_empty_echo(self):
|
||||
p = processes.Process('echo', ['-n'])
|
||||
self.assertEqual('', p.read())
|
||||
self.assertEqual(b'', p.read())
|
||||
self.assertRaises(processes.DeadProcess, p.read)
|
||||
|
||||
|
||||
class TestCatPool(LimitedTestCase):
|
||||
def setUp(self):
|
||||
super(TestCatPool, self).setUp()
|
||||
api.sleep(0)
|
||||
eventlet.sleep(0)
|
||||
self.pool = processes.ProcessPool('cat')
|
||||
|
||||
@skip_on_windows
|
||||
@@ -50,34 +53,30 @@ class TestCatPool(LimitedTestCase):
|
||||
|
||||
proc = self.pool.get()
|
||||
try:
|
||||
proc.write('goodbye')
|
||||
proc.write(b'goodbye')
|
||||
proc.close_stdin()
|
||||
result = proc.read()
|
||||
finally:
|
||||
self.pool.put(proc)
|
||||
|
||||
self.assertEqual(result, 'goodbye')
|
||||
self.assertEqual(result, b'goodbye')
|
||||
|
||||
@skip_on_windows
|
||||
def test_write_to_dead(self):
|
||||
result = None
|
||||
|
||||
proc = self.pool.get()
|
||||
try:
|
||||
proc.write('goodbye')
|
||||
proc.write(b'goodbye')
|
||||
proc.close_stdin()
|
||||
result = proc.read()
|
||||
proc.read()
|
||||
self.assertRaises(processes.DeadProcess, proc.write, 'foo')
|
||||
finally:
|
||||
self.pool.put(proc)
|
||||
|
||||
@skip_on_windows
|
||||
def test_close(self):
|
||||
result = None
|
||||
|
||||
proc = self.pool.get()
|
||||
try:
|
||||
proc.write('hello')
|
||||
proc.write(b'hello')
|
||||
proc.close()
|
||||
self.assertRaises(processes.DeadProcess, proc.write, 'goodbye')
|
||||
finally:
|
||||
@@ -95,7 +94,7 @@ class TestDyingProcessesLeavePool(LimitedTestCase):
|
||||
try:
|
||||
try:
|
||||
result = proc.read()
|
||||
self.assertEqual(result, 'hello\n')
|
||||
self.assertEqual(result, b'hello\n')
|
||||
result = proc.read()
|
||||
except processes.DeadProcess:
|
||||
pass
|
||||
|
||||
Reference in New Issue
Block a user