Попробуйте:
def func(x):
x['col2'] = np.arange(0, len(x['col1'])*100, 100)
return x
df.apply(lambda x: func(x) , axis=1)
Решение, которое я нашел, который, кажется, работает, состоит в том, чтобы использовать Тайм-аут:: тайм-аут :
require 'timeout'
...
begin
timeout(5) do
message, client_address = some_socket.recvfrom(1024)
end
rescue Timeout::Error
puts "Timed out!"
end
Объект тайм-аута является хорошим решением.
Это - пример асинхронного ввода-вывода (не блокирующийся по своей природе, и происходит асинхронно с потоком приложения.)
IO.select(read_array
[, write_array
[, error_array
[, timeout]]] ) => array or nil
Может использоваться для получения того же эффекта.
require 'socket'
strmSock1 = TCPSocket::new( "www.dn.se", 80 )
strmSock2 = TCPSocket::new( "www.svd.se", 80 )
# Block until one or more events are received
#result = select( [strmSock1, strmSock2, STDIN], nil, nil )
timeout=5
timeout=100
result = select( [strmSock1, strmSock2], nil, nil,timeout )
puts result.inspect
if result
for inp in result[0]
if inp == strmSock1 then
# data avail on strmSock1
puts "data avail on strmSock1"
elsif inp == strmSock2 then
# data avail on strmSock2
puts "data avail on strmSock2"
elsif inp == STDIN
# data avail on STDIN
puts "data avail on STDIN"
end
end
end
Я думаю, что неблокирующий подход - лучший вариант.
Я пробовал использовать упомянутую выше статью, но все равно не смог заставить ее зависнуть.
эта статья неблокирующая сеть и описанный выше подход jonke привели меня на правильный путь. Мой сервер блокировался при первоначальном подключении, поэтому мне нужно было, чтобы он был немного ниже.
rdoc сокета может передать более подробную информацию в connect_nonblock
def self.open(host, port, timeout=10)
addr = Socket.getaddrinfo(host, nil)
sock = Socket.new(Socket.const_get(addr[0][0]), Socket::SOCK_STREAM, 0)
begin
sock.connect_nonblock(Socket.pack_sockaddr_in(port, addr[0][3]))
rescue Errno::EINPROGRESS
resp = IO.select([sock],nil, nil, timeout.to_i)
if resp.nil?
raise Errno::ECONNREFUSED
end
begin
sock.connect_nonblock(Socket.pack_sockaddr_in(port, addr[0][3]))
rescue Errno::EISCONN
end
end
sock
end
, чтобы получить хороший тест. запустите простой сервер сокетов, а затем нажмите ctrl-z для его фонового
, IO.select ожидает, что данные поступят во входной поток в течение 10 секунд. это может не сработать, если это не так.
Это должна быть хорошая замена открытому методу TCPSocket.